블로그는 나의 힘!

 

 

프로젝트 속성 - C/C++ - 전처리기 - 전처리기 정의 - /D "_HAS_ITERATOR_DEBUGGING=0" 추가

boost 와 충돌 이 일어날수도 있다한다..

 

----------------------------------------------------

 

 

stl은 무겁다는 말이 있다.
그러나, stl과 같은 기능의 더 최적화 되어 있는 template을 혼자 만드는 것보다 어리석은 일은 없을 것이다.

stl은 template이고 _DEBUG가 정의되어 있을 경우 다음과 같은 macro가 정의되어 디버그 모드에서 속도가 매우 떨어지는 것 처럼 보인다.
_HAS_ITERATOR_DEBUGGING = 1

즉, 디버그 모드일 지라도 preprocessor definitions에서  _HAS_ITERATOR_DEBUGGING = 0 로 정의 한다면 비약적인 속도 향상을 가져올 수 있다.

_DEBUG를 라는 define을 유지한 채로 optimize을 위해 컴파일하려면 release와 똑같은 방법으로 옵션을 준다.

아래와 같이 하면 될 것이다.

compiler: visual studio 2005.

C/C++
  General > Debug information Format > /Zi
  Optimization > Optimization > /O1(크기 최적화) 또는 /O2(속도최적화)
  Optimization > Whole Program Optimization > /GL (line-time때 module간 optimization)
  Optimization > _HAS_ITERATOR_DEBUGGING = 0
  Code Generation > Basic Runtime Checks > Default

Linker
  Enable incremental link > /INCREMENTAL:NO
  Optimization > References > /OPT:REF
  Optimization > Enable COMDAT Folding > /OPT:ICF
  Optimization > Link Time Code Generation > /ltcg
 
테스트 해 본 코드는 다음과 같다.

 #include <windows.h>
#include <vector>
int main(int argc, char* argv[])
{
    Sleep(1000);

    std::vector<int> a;
    a.reserve(100000);


    LARGE_INTEGER s, e, t1;


    a.clear();
    QueryPerformanceCounter(&s);
    for (int i = 0; i < 100000; ++i)
    {
        a.push_back(i);
    }
    QueryPerformanceCounter(&e);
    t1.QuadPart = e.QuadPart - s.QuadPart;

    printf("%I64d\n", t1.QuadPart);
}



결과 값은 다음과 같다.
1. debug에서 디폴트 프로젝트로 실험 했을 경우 걸리는 시간
  725910

2. release에서 디폴트 프로젝트로 실험 했을 경우 걸리는 시간
  2623

3. debug에서 위의 옵션을 주고 실험 했을 경우 걸리는 시간
  2854

여기서 일반 debug에서의 속도와 release에서의 속도는 차이가 심하다는 것을 알 수 있으며,
debug에서 위의 define을 했을 경우에 release와 비슷한 수준의 profiling을 할 수 있다는 것을 알 수 있다.

 


 

'[ Programing ] > STL & Booster' 카테고리의 다른 글

stl 처리 속도 테스트  (0) 2013.05.22
Boost 설치 설명  (0) 2013.05.21
bitset  (0) 2013.05.21
[STL]string에서의 trim() 구현  (0) 2013.05.21
[STL] list 옵션 sort()  (0) 2011.10.10
Posted by Mister_Q