Gcc Optimization Options
GccOptimizationOptions입니다.
Option Details ¶gcc는 기본적으로 아무런 옵션을 지정하지 않으면, 만들어지는 코드를 최적화(optimization)시키지 않습니다. 최적화를 위해, 여러가지 옵션을 제공하는데 (아래 표 참고), 이들 옵션을 일일히 선택하기 보다는 이들 옵션을 세트로 묶어 제공하는 '-O', '-O1', '-O2', '-O3' 등을 일반적으로 씁니다. (참고로 '-O0'는 전혀 최적화하지 말라는, default 옵션입니다.)
'-O' 또는 '-O1'의 경우, 만들어지는 오브젝트, 또는 실행 파일을 가능한 작게 하면서, 컴파일 시간이 오래걸리지 않는 범위에서 최적화를 수행합니다.
'-O2'의 경우, 만들어지는 코드가 가능한 빠르게 수행되도록 하지만, 코드의 크기가 너무 커지지 않도록 하는 범위에서 최적화를 수행합니다.
'-Os'의 경우, '-O2'에서 제공하는 모든 최적화 기능을 다 쓰지만, 코드의 크기를 증가시키는 최적화 기능은 빼고 나서 최적화를 수행합니다.
'-O3'의 경우, 코드의 크기는 전혀 신경 쓰지 않고, 오직 빠른 코드를 만들어 내기 위해 최적화를 수행합니다. 그러나, 꼭 생각해 두어야 할 점은, '-O3'로 만들어낸 코드가 반드시 '-O2'를 써서 만들어낸 코드보다 빠르다는 보장은 없다는 것입니다. 왜냐하면, 보통 CPU가 기계어를 수행할 때, 일정한 분량만큼 먼저 CPU 내부의 cache(캐시)에 불러와서 수행하는데, '-O3'를 써서 만든 코드는 대개 크기가 커서, 이 cache에 들어갈 수 있는 명령의 양이 상대적으로 적어지기 때문에, 오히려 느려질 가능성도 있습니다.
'-On' (n=1, 2, 3) 꼴의 옵션과 더불어 위 표의 왼편 옵션을 섞어 쓸 수도 있습니다. 예를 들어, 위 표에 따르면 '-O2'를 쓸 경우, 'inline-function' 최적화는 적용되지 않습니다. 따라서 다음과 같이 '-O2'에 해당하는 모든 최적화 기법들과 '-inline-functions'을 함께 쓸 수 있습니다: $ gcc -O2 -finline-funtions hello.c 물론, 특정 옵션 기능을 빼는 것도 가능합니다. 아래는 '-O3'가 제공하는 모든 최적화 기법을 적용하지만 'inline-functions' 최적화만 빼고 컴파일하는 것을 보여줍니다.
$ gcc -O3 -fno-inline-functions hello.c 즉, 위 표의 왼편 부분의 옵션을 적용시키려면(on) "-f옵션이름"을 쓰고, 끄려면(off),
"-fno-옵션이름" 꼴을 씁니다.
아래 PDF는 간단한 XML tree를 memory에 build하는 프로그램을 여러 가지 최적화 옵션을 써서 컴파일한 후, 실행 시간을 재 본 것입니다. References ¶이 글의 대부분은
![]() ![]() GCC Info Manual을 보시면 최신의 정보를 얻을 수 있습니다. 또는
![]() ![]() (가입하시고 login하시면 볼 수 있습니다.)
![]() |