C++内存管理|05 各平台下std::allocator概览
1. VC6中的std::allocator
VC6
中的std::allocator
源码实现如下图:
从图中可以发现,VC6
中的std::allocator
并没有进行memory pool
这类的处理,直接在里面调用operator new()
,进而调用::operator new
,然后malloc
来实现的。
2. BC中的std::allocator
没有安装BC5,所以就不查看BC的源码来进行验证了,直接看课件。
3. GCC 中的std::allocator
然后再来看GCC2.9中的实现。
从前面的几个实现都可以发现,它们的std::allocator
都是直接调用的operator new
, 并没有进行memory pool
的处理。但是在GCC2.9
中发现一点值得注意的是,STL
中的容器并没有使用这个std::allocator, 而是使用的名为std::alloc
的一个allocator
.
而这个std::alloc其实是大有文章的。由于GCC2.9
已经比较久远了,我们看看我们的GCC4.9
中是否还是这样的。GCC4.9
中没有了alloc
,但是在GCC4.9
中增加了很多的extended allocator
, 在这些extended allocator
中存在一个叫做__pool_alloc
的allocator
, 它实际上就是GCC2.9
中的alloc
。转回来看看GCC4.9
中的std::alloctor
,出奇的一致GCC4.9
中的std::allocator
也是没有任何特殊的处理,直接使用的operator new
。
4. 总结
- 原文作者:Binean
- 原文链接:https://bzhou830.github.io/post/20180116C++%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%8605/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。