Skip to content
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" )
Clone this wiki locally