使用内存池进行性能优化

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

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

测试文件在项目中



test.cpp
测试内容大意为:
用内存分配器以 250000次/循环
向数据结构(默认堆,Memory Pool,std::vector)中添加并删除 int值

Results:

  • 可以看到官方的默认实现中内存占用及其不稳定
  • 而Memory Pool事先分配好了内存就很稳定(执行速度也快了)
  • 最差的是std::vector,它执行添加和删除速度很慢,因为vector在增加项目的时候申请内存(malloc),但在删除时不重新划分内存(realloc)而是直接保留,所以虽然执行速度慢,但内存状态相对稳定。

转载于:https://www.cnblogs.com/santaizi/p/5252590.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值