2010-05-06 4 views
0

msvcrt.dll 또는 msvcrtd.dll을 사용하여 MS VC6 모드에서 32 비트 인텔 컴파일러로 컴파일 된 C++ 코드가 있습니다. 이 프로세스는 많은 양의 메모리를 할당하고 할당을 해제합니다. WMI로 메모리 사용량을 모니터링하고 VirtualSize 및 WorkingSetSize를 살펴 봅니다. 1.2-1.4을 높이는 작업 가상 모금 1.7-- 2.1GB : 가상 일정한 1.7GB, 작업 일정이 아닌 디버그 런타임 (MSVCRT.DLL)와 1.2GB
: 디버그 런타임 (msvcrtd.dll)와msvcrt : 디버거에서 메모리 사용량이 많지 않지만

GB
디버거가 아닌 디버거 (windbg) : 가상 상수 1.7GB, 작업 상수

2.1GB 가상 프로세스가 (예상대로) 충돌합니다. 그러나 디버거가 아닌 경우에만 (비 디버그 인) msvcrt.dll을 사용하면 가상 사용이 증가하는 이유는 무엇입니까? 모든 경우 컴파일 플래그가 동일하며 런타임 라이브러리 만 다릅니다.

답변

0

자주 문제는 디버그 RTL에 의해 무효화되는 초기화되지 않은 지역 변수이지만 릴리스 RTL을 사용하지 않는 것은 아닙니다. "Surviving the Release Version"을보고 도움이되는지 확인하십시오.