ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)
生活随笔
收集整理的這篇文章主要介紹了
ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ptmalloc將相似大小的 chunk 用雙向鏈表鏈接起來,這樣的一個鏈表被稱為一個 bin。 Ptmalloc 一共維護了 128 個 bin,并使用一個數組來存儲這些 bin,這個數組被成為bin數組。
bin數組結構如下:
在32位平臺下,bin[0] 和 bin[127] 是不存在的,因為最小的 chunk 為 16B, small bin 一共 62 個, large bin 一共 63 個,算上 bin[1] 加起來一共 128 個 bin。
其中 small bin 可以看成是公差為8的等差數列,其相鄰兩個 bin 的 chunk 的大小相差8B,如上圖所示。large bin 的每個 bin 中的 chunk 大小不是一個固定的等差數列,而是分成六組,每組 bin 是一個固定公差的等差數列,每組的 bin 數量依次為 32、 16、 8、 4、 2、 1,公差依次為 64B、 512B、4096B、32768B、 262144B 等。
正是基于 bin 數組的這種關系,當用戶給出一個需要申請的空間大小,ptmalloc 會很容易的確定改大小空間在哪個 bin 里。
fast bin:
- 不大于 max_fast(默認值為 64B)的 chunk 被釋放后,首先會被放到 fast bin 中, fast bin 中的 chunk 并不改變它的使用標志 P。 這樣也就無法將它們合并, 當需要給用戶分配的 chunk 小于或等于 max_fast 時, ptmalloc 首先會在 fast bin 中查找相應的空閑塊,然后才會去查找 bin 中的空閑 chunk。在某個特定的時候(在內存釋放合并 top chunk 時,如果合并后的 chunk 的大小大于 FASTBIN_CONSOLIDATION_THRESHOLD(默認64KB), 會觸發進行 fast bins 的合并操作),ptmalloc會遍歷 fast bin中的 chunk,18將相鄰的空閑 chunk 進行合并, 并將合并后的 chunk 加入 unsorted bin 中,然后再將 usorted bin 里的 chunk 加入 bins 中。
總結
以上是生活随笔為你收集整理的ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 治疗多囊卵巢不孕什么方法好
- 下一篇: 和平饭店剧情介绍