2011-07-31 61 views
2

爲了測試我的對象是否有內存泄漏,我將它實例化了10000次並刪除了10000次。之後,我的程序使用了大約500kb。我不認爲我的物體正在泄漏。這是堆碎片的標誌嗎?

感謝

+4

什麼操作系統?你怎麼知道你的「程序使用了大約500kb」? – Nemo

回答

6

在Linux上至少,在C庫不只是因爲你叫delete內存釋放回操作系統。它將內存放在你的進程中的「空閒列表」中。因此,如果您使用topcat /proc/XXX/status等命令來測量虛擬內存使用量,則會看到流程中的所有內容(包括該空閒列表)的大小。

當您的freedelete爲「大」對象時,C庫只會將內存釋放回系統。 「大」的定義是128K字節。

我懷疑Windows,Mac等工作類似,但我不知道肯定。

所以你的問題的簡短答案是「不,不一定」。

2

根據你的班級實際包含和做什麼,即使你的班級沒有泄漏,你描述的內容也可能發生。

一些標準庫實現從內存池中分配類std::string

您應該使用像valgrind這樣的實際泄漏檢查器來代替您的測試運行。