프로젝트 속성 - 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을 할 수 있다는 것을 알 수 있다.
[출처] STL Debug 모드 에서 속도 난감할때..|작성자 핵이
'[ 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 |