1. 일반
  2. C/C++
  3. 미디어
  4. 팁 & 테크
[레벨:3]지상현
2007.10.23 21:49
최적화 옵션 때문인 것 같습니다.

디버그 모드는 편의를 위해 모든 인라인 함수를 인라인으로 처리하지 않습니다.
그래서 일단 strlen 함수가 strlen.asm에 있는 어셈블리 버전으로 호출됩니다. (이 함수는 32비트씩처리합니다.)
그런데 릴리즈 모드로 오면 최적화 옵션에 따라 strlen 함수를 내장 함수로 처리해서 인라인 확장을 시켜버리는데... 이게 8비트씩 처리하는 코드가 나오더군요.

#pragma function(strlen) 을 이용해서 strlen을 내장 함수로 처리하지 않으면, 모두 똑같이 strlen.asm의 함수를 호출하기 때문에 디버그 모드와 릴리즈 모드의 속도 차이가 없게 됩니다. (물론 두 경우 모두 빨라지는 쪽으로 같아집니다.)

#pragma function(strlen)을 써보세요.
여튼 이것으로 봐도 32비트 단위로 처리하는게 훨씬 빠르다는 걸 알 수가 있군요.
문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)