2014-07-01 134 views
-1

我用C庫malloc來分配8MB內存,使用那個內存後我用free來釋放內存8MBMalloc分配相同的內存塊

但是當我再次使用malloc來分配內存的8MB時,它正在分配與先前分配的位置相同的位置。

如何避免這個問題,爲什麼會發生這種情況?

編輯:我實現一個工具來測試主內存,如果malloc分配的內存塊一樣,不可能檢查整個存儲

+3

是什麼讓你覺得這是一個問題? – John3136

+0

是什麼讓你覺得這是一個問題?你有沒有閱讀「免費」的文件? –

+0

請解釋爲什麼這是一個問題。如果你釋放內存,你不應該掛在任何指向它的指針上。 –

回答

4

這不是問題本身,並且是由設計。出於性能原因,malloc的典型實現將回收內存塊。無論如何,由於malloc從有限的值池中返回地址,因此無法保證不回收塊。

停止malloc返回塊的唯一可靠方法是停止釋放它們。當然,這不是很實際。

我正在實現一個測試主內存的工具。如果malloc分配相同的內存塊,則不可能檢查整個內存。

您的測試主內存的工具不能用malloc或任何用戶模式程序來實現。現代操作系統不允許您訪問物理內存。而是他們呈現虛擬化的內存視圖。程序中的地址不是物理地址,而是虛擬地址。測試物理內存要求您的入門級別遠低於用戶模式程序所能達到的級別。

+0

然後會出現大量未使用的內存 – Nikhilendra

+1

對不起,您的意思是? –

+0

只有當'malloc'分配的內存被釋放時,它才能被其他程序使用 – Nikhilendra

0

這會幫助你 How malloc works? 爲了防止這種情況,分配使用malloc /釋放calloc幾個字節,然後釋放內存更大的塊。 順便說一句,這是不是一個錯誤的行爲來獲得相同的內存地址。

您可能需要調用system()從代碼運行幾個linux命令(它提供詳細的內存管理選項)。主存儲器管理無法使用malloc/free進行/測試,它們僅限於在在程序運行時分配給你的程序的內存。

+0

這是怎麼發生的 – Nikhilendra