做算法的时候经常会直接接触底层数据结构,并对它们又更高的可靠性和性能要求。
就像我常说的:Never Repeat Yourself,你永远不可能短时间写出别人久经考验的代码。
所以在GitHub上找了一下这个用C++ 模板实现的内存池项目。
如果有兴趣探究内存池的实现方式和结构,请看http://www.codeproject.com/Articles/15527/C-Memory-Pool
在这里我放上自己Fork的源码Git
https://github.com/ImNaohaing/MemoryPool
当然内存池是一种模型而已,具体实现靠的是C++标准库)sgi(Silicon Graphics Computer System,Inc) 版本)中引入的内存配置器(allocator)实现的.
套官网上的一句话:这场革命来的太晚
。
C++官方wiki对内存配置器的描述http://cplusplus.wikidot.com/cn:allocator
这是分别使用STL默认配置器,作者写的Memory Pool 和 STL::Vector(最常用)的性能比较:
测试文件在项目中
test.cpp
测试内容大意为:
用内存分配器以 250000次/循环
向数据结构(默认堆,Memory Pool,std::vector)中添加并删除 int值
Results:
- 可以看到官方的默认实现中内存占用及其不稳定
- 而Memory Pool事先分配好了内存就很稳定(执行速度也快了)
- 最差的是std::vector,它执行添加和删除速度很慢,因为vector在增加项目的时候申请内存(malloc),但在删除时不重新划分内存(realloc)而是直接保留,所以虽然执行速度慢,但内存状态相对稳定。