2011-06-23 70 views
0

可能重複:
How does delete work in C++?
C programming : How does free know how much to free?'免費/刪除'如何工作?

對於每一個動態內存分配,使用 '的malloc /新',我們有方法, '自由/刪除' 釋放所分配的內存。

我的問題是,如果內存分配大小在運行時降低並且內存位置不連續,這些內存釋放方法如何知道要釋放多少內存以及要清除的內存位置是什麼?

如果我們只傳遞一個指向單個位置的指針,這些函數是如何工作的?

+1

我將此標記爲重複副本,只是爲了強調問題的普遍性。 –

回答

0

他們記錄你在內部分配了多少內存。

0

malloc/new分配內存時,它還會記錄它爲指向給定內存位置的指針分配的內存和內存量。 free/delete查找當您給它一個指針時釋放哪些內存。

這就是爲什麼你不應該試圖釋放你用「+ =」或類似的東西移動的指針。

+0

請注意,不需要是「表格」。可以僅僅在返回的地址之前存儲塊的大小,並且將堆視爲這種塊的鏈接列表。跟蹤這些東西的實際方法是高度依賴於實現的,這是爲什麼它是未定義的行爲來釋放/刪除除malloc/new之外的指針之外的任何指針的一部分。 – cHao