2010-05-06 69 views
0

我有一個C++代碼與英特爾編譯器,32位,在MS VC6模式下編譯,因此使用msvcrt.dll或msvcrtd.dll。該過程會導致內存分配和重新分配。我使用WMI監視內存使用情況並查看VirtualSize和WorkingSetSize。msvcrt:內存使用變得瘋狂,但不在調試器下

與調試運行時(msvcrtd.dll):虛擬恆定1.7GB,工作恆定1.2GB
與非調試運行時(MSVCRT.DLL):虛擬飼養1.7-- 2.1GB,工作提高1.2-1.4 GB
帶有非調試運行時,但在調試器(windbg)下:虛擬常量1.7GB,工作常量

在2.1 GB虛擬進程正在崩潰(如預期的那樣)。但是,爲什麼虛擬使用率只會隨着(非調試)msvcrt.dll而增加,並且只有在不在調試器下才會增加? 在所有情況下,編譯標誌都是相同的,只有運行時庫不同。

回答

0

通常,問題是未初始化的局部變量,它們被調試RTL清零,但在使用發佈RTL時沒有。看看"Surviving the Release Version",看看這是否有幫助。