[英]Why this code is not causing memory leak?
我想在我的應用程序中模擬內存泄漏。 我寫下面的代碼,並試圖在perfmon中看到。
int main()
{
int *i;
while(1)
{
i = (int *) malloc(1000);
//just to avoid lazy allocation
*i = 100;
if(i == NULL)
{
printf("Memory Not Allocated\n");
}
Sleep(1000);
}
}
當我在任務管理器中看到使用過的內存時,它在52K和136K之間波動 ,但不會超過它。 手段,有些東西它顯示52K,有時136K,我不明白這個代碼一旦達到136K,回到52K,並沒有超越那個。
我嘗試使用perfmon ,但不能准確地在perfmon中看到什么,計數器的快照,
請建議如何模擬內存泄漏以及如何檢測它。
雖然操作系統可能會推遲動態分配的內存的實際分配,直到使用它為止,但編譯器優化器可能會消除僅寫入並且從不讀取的分配。 因為您的寫入沒有明確定義的可觀察行為(您從未從中讀取過),編譯器可能會很好地優化它。 我建議檢查生成的匯編代碼,看看編譯器實際生成了什么。 實際上,這應該是回答問題的第一步,例如“為什么這段代碼的行為不像我認為的那樣?”。
嚴格來說,內存泄漏是依賴於上下文的:程序中的某些內容會隨着時間的推移不斷分配內存,而不會釋放它, 而它應該被釋放 。
您的代碼會在每次后續遍歷while循環時產生“泄漏”,因為您的程序在該點失去了先前分配的指針的知識。 這僅在檢查中可見,但在這種情況下; 從發布的代碼來看,它看起來更像是你實際上在做的事情,盡管很慢,正試圖創造一種記憶壓力的情況。
要在沒有檢查的情況下“找到”泄漏,您需要運行像valgrind (Unix / Linux / OSX)這樣的工具,或者在Visual Studio中使用DEBUG_NEW宏啟用分配跟蹤並使用調試器查看輸出。
如果你真的想急着強調內存,一次分配1024 x 1024 x 1024字節......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.