2011-09-28 80 views
0

我想了解Objective-c在較低級別的內存管理。假設我在堆上爲某個Objective-c對象分配了100個字節。 當對象爲dealloc'd時,這個100字節塊會發生什麼?在Objective-c中釋放對象時實際發生了什麼?

我很好奇運行時如何知道一塊內存在dealloc'之後是否可以重新使用。實際字節發生了什麼?它們是否設置爲隨機值?或者,他們可能會保留自己的價值觀,並在稍後被其他對象覆蓋。

回答

2

他們保持它們的價值,但被標記爲未使用和可覆蓋。

這種行爲就像在的malloc C. &免費功能

+0

是否該塊中的0字節紀念100字節的塊爲未使用?或者,運行時可能會維護一張未使用的地址位置表以及每個位置的大小? – SundayMonday

+2

通常,分配內存區之前的某些位(如該區域的標題)由低級內存庫用於維護有關內存區本身的信息。其他一些運行時保留「空閒列表」(空閒區列表)並優化其重用以避免內存碎片。但所有這一切都取決於使用的庫和運行時(libc/stdlib)和分配器使用 – AliSoftware

+1

您可能還會發現[此其他SO問題](http://stackoverflow.com/questions/1119134/how-do-malloc-和免費工作)有趣的(即使它是C/C + +相關) – AliSoftware

相關問題