VC6、BC5、G2.9标准分配器一览
目錄
- VC6標(biāo)準(zhǔn)分配器
- BC5標(biāo)準(zhǔn)分配器
- G2.9標(biāo)準(zhǔn)分配器
VC6標(biāo)準(zhǔn)分配器
VCx中源碼可以在電腦路徑中找:
[D:\Program Files\VisualStudio\Community\VC\Tools\MSVC\14.28.29333\include\xmemory]
不過(guò)太多了。大概在837行左右有關(guān)于allocator代碼。還是先看侯捷PPT上的吧。
在VC中使用容器,都是通過(guò)allocator取得的。allocator都是通過(guò)調(diào)用malloc函數(shù),所以都會(huì)有cookie。
分配類型是通過(guò)元素類型為單位的。
具體用法可以參考https://docs.microsoft.com/zh-cn/cpp/standard-library/allocators-header?view=msvc-160官方文檔。
BC5標(biāo)準(zhǔn)分配器
與VC情況完全一樣。
現(xiàn)在已知標(biāo)準(zhǔn)庫(kù)提供的分配器都是直接調(diào)用malloc,每個(gè)容器內(nèi)部都會(huì)存在一個(gè)cookie。cookie作用是記錄區(qū)塊的大小,只有在區(qū)塊大小一樣的情況下才能簡(jiǎn)化cookie存在。容器中每個(gè)元素大小一樣,所以可以不用cookie。
G2.9標(biāo)準(zhǔn)分配器
與上面一致,沒(méi)有特殊設(shè)計(jì)。但是所有容器都沒(méi)有使用到標(biāo)準(zhǔn)分配器std::allocator,而是使用std::alloc。
alloc是個(gè)classtype,allocate是其內(nèi)部的靜態(tài)函數(shù),所以可以出現(xiàn)alloc::allocate()、alloc::deallocate()的用法。
注意alloc::allocate(512)表示分配了512個(gè)字節(jié),而非VC下的元素類型
G2.9的std::alloc在G4.9轉(zhuǎn)變?yōu)開(kāi)_gnu_cxx::__pool_alloc,內(nèi)容也做了一些修改。alloc或者說(shuō)__pool_alloc的好處就是省掉了相同元素的cookie。
總結(jié)
以上是生活随笔為你收集整理的VC6、BC5、G2.9标准分配器一览的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 摩尔庄园神秘商人在哪
- 下一篇: 《c++特性》