-
Notifications
You must be signed in to change notification settings - Fork 10
C_opt
RemeberIamLove edited this page Sep 12, 2016
·
1 revision
- 컴파일러 최적화 옵션 켜기 --> 최적화는 complier에 의한 것이므로, 파일 단위로 발생한다.
- 변수는 사용될 때, 초기화 해라. 초기화 하지 않은 변수는 stack에 들어가지 않기 때문.
- 중괄호 {}를 적절히 사용하여 변수 유효 범위를 제한하라.
- Volatile 사용해서 최적화하면 안되는 변수 설정하기
- const 사용해서 메모리 접근 줄이기
- 배열이나 함수는 인자나 리턴값을 쓰려면 등가 포인터를 만들어라.
- 변수의 동작 범위를 제한하라. extern, static 등 사용. 범위가 넓으면 compiler가 최적화하는데 방해가 된다. 필요시에 {} 블락을 사용하여 변수의 범위를 제한한다.
- code 내에서는 상수를 직접 사용하지 말라 -> 이식성이 떨어짐. 이것도 최적화의 한 부분임.
- 최적화가 되어 있는지 안되었는지는 assemble 결과로 확인하라.
- 변수 타입을 사용에 맞게 사용하라. 음수 필요없으면 unsigned로 선언.
- 가장 빠른 데이터 타입은 native type인 int 이다. char 사용한다고 빠르지 않다. 메모리를 줄이는게 아니면 float, double 선택. 유효 정밀도를 따져라. 메모리 차이만 있지 속도 차이는 없다.
- type casting은 대부분 속도 영향없지만, 메모리가 수정되야 하는 캐스팅. float -> double로 캐스팅하면 비용 발생.
- 하드웨어 비트연산은 표준 매크로를 사용하라. #define SetBit( dest, position ) ... CMake options
- 컴파일러 최적화 옵션 (참고)
-O0: 최적화 옵션 끄기. -O옵션 사용하지 않았다면 디폴트로 이 옵션이 선택된다.
-O1: basic 최적화 옵션. 컴파일러는 faster and smaller code를 생성하도록 "노력"한다.
-O2: -O1의 step-up 옵션으로, 컴파일러는 code performance를 증가시키도록 한다. 코드 사이즈를 상관하지 않는다.
-O3: 최상위 최적화 레벨. 컴파일 타임과 메모리 사용의 최적화를 시도한다. O3는 안정화되어 있지 않고, 추천되지 않는다.
-Os: 코드 사이즈 최적화 한다. 코드 사이즈를 키우지 않는 -O2의 모든 옵션을 켠다.
-Og: GCC 4.8 이상에서 일반적 최적화 레벨. 빠른 컴파일과 우수한 디버깅 정보 제공. 런타임에서 비교적 합리적 성능.
-Ofast: GCC 4.7 이상. 이옵션은 -O3 -ffast-math -fno-protect-parens, -fstack-arrays로 구성되어 있다. 추천하지 않는다.
CMakeLists.txt에 다음과 같이 입력하여 최적화 옵션을 준다. set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2" )