STL中的Allocator

最近在看STL,寫一點博客。

關於一些細節可能就不放上來了,就寫一些我自己的心得。

1.爲什麼要用Allocator

C++容器的設計思路是,對存放到裏面的東西是拷貝一份放進去。

而且裏面的空間都是動態分配的。

所以在構建容器的時候,需要必要的①內存分配②構造對象。


2.new operator、operator new、placement new

(1)new operator

就是我們平時所使用的new/delete

new包含的,意思包括①分配內存②構造對象

(2)operator new

用來分配內存,相當於malloc

operator delete相當於free

(3)placement new

用來構造對象,需要給出指定的地址,以及傳遞給構造函數的參數


3.SGI STL的allocator

在侯捷剖析的STL中,有2個內存分配器

①std::allocator

這個是符合STL的allocator標準的分配器,實現就是採用的operator new 和 operator delete

②alloc

這個是當時的SGI STL自己所使用的默認內存分配器

分了兩層機制

第一層,分配128Bytes以上的,採用的是malloc和free來分配內存

第二層,分配128Bytes以下的,採用的是memory pool的概念

程序再使用二層的時候,直接向free_list申請內存,如果free_list不足,它再向memory pool申請

memory pool是一段很大的連續內存,而memory pool不足的情況下,再向heap malloc內存。


4.當前的GCC的實現

GCC是基於SGI實現的。

但是我現在所使用的GCC 4.9.2,的容器stl_vector、stl_list等都沒有使用alloc作爲默認的,而是直接使用std::allocator了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章