中動態內存的大小我明白,使用calloc()
和malloc()
將在堆上分配特定數量的內存並返回一個指向開始分配的指針。如何跟蹤在C
我也知道free(poinerVar)
將解除分配(釋放分配的內存)。但是,我無法想像free()知道如何取消分配的內存量。像C#,Java這樣的管理語言會跟蹤它的垃圾回收對象,但C肯定不會(據我所知)。
在內存管理層面發生了什麼,它使得free可以釋放內存並只傳遞指針變量。
中動態內存的大小我明白,使用calloc()
和malloc()
將在堆上分配特定數量的內存並返回一個指向開始分配的指針。如何跟蹤在C
我也知道free(poinerVar)
將解除分配(釋放分配的內存)。但是,我無法想像free()知道如何取消分配的內存量。像C#,Java這樣的管理語言會跟蹤它的垃圾回收對象,但C肯定不會(據我所知)。
在內存管理層面發生了什麼,它使得free可以釋放內存並只傳遞指針變量。
這裏常用的方法是內存分配函數在實際內存塊之前存儲關於分配空間的元數據。
這樣,free()
就可以在實際分配的塊前面讀取內存,並且可以找出它應該實際釋放多少內存。
C標準不要說如何 malloc/free在封面下工作。只有外部行爲。如果你真的想了解它,你需要看看具體的實現。查看一個開源的libc,就像GNU/gcc使用的libc一樣。
有人必須保持跟蹤,不知何故。語言標準不需要任何特定的方式來做到這一點。什麼都可以! –