前面有提到過,使用者正在使用的 Heap 區塊稱為 Allocated Chunk,而被 Free 掉的空間為 Free Chunk 並會依據不同大小用 Linked-list 組成不同的 bin,那究竟什麼是 Chunk 呢?
Chunk 是 glibc 管理記憶體的基本單位,當 Heap 一開始被初始化時整段 Heap 會被稱為 Top Chunk,如圖黃色整段。
當使用者使用 malloc() 等申請記憶體時,首先會先到昨天所述的 Bin 去尋找有沒有適合的,若沒有的話則會去 Top Chunk 分割出記憶體。如果 Top Chunk 也不夠則會使用 brk() 繼續擴充後再將已擴充的 Top Chunk 切分。
我們使用圖解來說明一下,使用 malloc() 與 free() 時的樣子。
假設我們用 malloc 申請兩塊大小 X 的 Chunk A 和 B 就會向下圖這樣:
當我們 free() 掉時就會變成這樣: