VC6、BC5、G2.9标准分配器一览

132 阅读1分钟

目录

VC6标准分配器

VCx中源码可以在电脑路径中找:
[D:\Program Files\VisualStudio\Community\VC\Tools\MSVC\14.28.29333\include\xmemory]
不过太多了。大概在837行左右有关于allocator代码。还是先看侯捷PPT上的吧。
在这里插入图片描述
在VC中使用容器,都是通过allocator取得的。allocator都是通过调用malloc函数,所以都会有cookie。
分配类型是通过元素类型为单位的。
具体用法可以参考docs.microsoft.com/zh-cn/cpp/s…官方文档。

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。