目录
- 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。