您的位置:首页 > 其它

使用内存池进行性能优化

2016-03-08 03:04 183 查看

做算法的时候经常会直接接触底层数据结构,并对它们又更高的可靠性和性能要求。

就像我常说的: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(最常用)的性能比较:





测试文件在项目中

[code]

test.cpp

测试内容大意为:

用内存分配器以 250000次/循环

向数据结构(默认堆,Memory Pool,std::vector)中添加并删除 int值


[/code]

Results:

可以看到官方的默认实现中内存占用及其不稳定

而Memory Pool事先分配好了内存就很稳定(执行速度也快了)

最差的是std::vector,它执行添加和删除速度很慢,因为vector在增加项目的时候申请内存(malloc),但在删除时不重新划分内存(realloc)而是直接保留,所以虽然执行速度慢,但内存状态相对稳定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: