日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统)

發布時間:2023/11/30 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ptmalloc堆内存管理机制(主要讨论Linux x86下32位系统) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • bin(chunk容器)
  • 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位系统)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。