目錄
- VC6標準分配器
- BC5標準分配器
- G2.9標準分配器
VC6標準分配器
VCx中源碼可以在電腦路徑中找:
[D:\Program Files\VisualStudio\Community\VC\Tools\MSVC\14.28.29333\include\xmemory]
不過太多了。大概在837行左右有關于allocator代碼。還是先看侯捷PPT上的吧。
在VC中使用容器,都是通過allocator取得的。allocator都是通過調用malloc函數,所以都會有cookie。
分配類型是通過元素類型為單位的。
具體用法可以參考https://docs.microsoft.com/zh-cn/cpp/standard-library/allocators-header?view=msvc-160官方文檔。
BC5標準分配器
與VC情況完全一樣。
現在已知標準庫提供的分配器都是直接調用malloc,每個容器內部都會存在一個cookie。cookie作用是記錄區塊的大小,只有在區塊大小一樣的情況下才能簡化cookie存在。容器中每個元素大小一樣,所以可以不用cookie。
G2.9標準分配器
與上面一致,沒有特殊設計。但是所有容器都沒有使用到標準分配器std::allocator,而是使用std::alloc。
alloc是個classtype,allocate是其內部的靜態函數,所以可以出現alloc::allocate()、alloc::deallocate()的用法。
注意alloc::allocate(512)表示分配了512個字節,而非VC下的元素類型
G2.9的std::alloc在G4.9轉變為__gnu_cxx::__pool_alloc,內容也做了一些修改。alloc或者說__pool_alloc的好處就是省掉了相同元素的cookie。