1. 程式人生 > >內存池技術

內存池技術

結構體 必須 根據 技術分享 通過 用戶 內存池管理 size 問題

內存池很重要,也不重要。看場合,最近寫了一個性能很不錯的內存池,結構圖發上來記錄自己思路。

沒有銀彈,同樣,沒有最好的內存池,只有在某個應用中適合的內存池,適合就是好的

每個池子大小通過參數設定,size管理器個數通過參數在初始化時設定,每個池子的結構體的個數也初始化設定死,有好處,一次申請,有壞處,如果用完,那就需要調用OS的,對於不同應用設定不同參數。
選擇棧或者隊列都可以,如果希望分配和釋放可以並行,那麽選隊列,一個頭部,一個尾部,看應用了。
線程安全也不是問題,有獲取當前線程id的函數,那麽一切都簡單了。根據線程建立線程私有的“內存池管理器”,如下圖,也就是說每個線程都有這些管理器,那麽必須有個管理這些“內存池管理器”的一個總的管理器,也不是問題。看應用了。如果需要。就做,

是在線程裏初始化還是在主線程初始化看場合而定。

此結構的內存池性能很不錯,glib的windows庫速度比不過我的,缺點很明顯,沒調試機制,有優點,大小任意,用戶申請的內存不會含有任何其他標記,空間效率高了。
權衡很重要。按需而定。

技術分享圖片

內存池技術