컴퓨팅에서 최적화 컴파일러는 실행 가능한 컴퓨터 프로그램의 일부 속성을 최소화하거나 최대화하는 컴파일러입니다.

일반적인 요구 사항은 프로그램의 실행 시간, 메모리 요구 사항 및 전력 소비를 최소화하는 것입니다.

 

컴파일러 최적화는 일반적으로 프로그램을 가져와 더 적은 리소스를 사용하거나 더 빠르게 실행하는 의미로,

프로그램을 생성하도록 변환하는 최적화 작업을 사용하여 구현됩니다.

 

■ 최적화 옵션

-O0: 최적화를 수행하지 않습니다.

 

-O: 코드 크기와 실행 시간을 줄이는 것을 제외한 최적화를 수행하지 않습니다.

-O1: 코드 크기와 실행 시간을 줄이는 것을 제외한 최적화를 수행하지 않습니다.

 

-O2: 메모리 공간과 속도를 침범하지 않는 범위 내의 모든 최적화를 수행합니다. loop unrolling과 funtion inlining에 대한 최적화를 수행하지 않습니다. 커널 컴파일의 경우 -O2를 사용합니다. -O3는 인라인을 변경하는데, 커널은 최적화된 수행 속도를 위해 의도적으로 인라인을 사용합니다.

 

-O3: -O2 최적화에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행합니다. 코드의 크기는 전혀 신경쓰지 않고, 오직 빠른 코드를 만들기 위해 최적화합니다. -O3로 만든 코드가 -O2로 만든 코드보다 빠르다는 보장은 없습니다.

보통 CPU가 기계어를 해석할 경우, 일정한 분량만큼 cache에 미리 저장하여 명령어들을 수행합니다.

-O3를 사용한 코드는 대게 크기가 커서 cache에 들어갈 수 있는 명령의 양이 상대적으로 적어지기 때문에, 오히려 느려질 가능성도 있습니다.

 

-Os: -O2 최적화 기능을 사용하지만, 코드 크기를 증가시키는 최적화는 생략합니다.

 

■ Debug Mode : Release Mode

컴파일러들은 Debug Mode와 Release Mode를 지원합니다.

- Debug Mode: -O1 최적화를 수행합니다. 디버깅 정보를 삽입합니다.

- Release Mode: -Os 최적화를 수행합니다. 디버깅 정보를 삽입하지 않고 코드를 최적화하여 실행 파일 크기를 최대한 줄일 수 있습니다.