本文是多年前的一篇草稿.
目前项目中准备用hoard,恢复发布此文。
1.背景
das前置机和服务器有崩溃的情况,是否是大量请求时内存不足所致?
一个umx文件加载进内存,内存消耗为什么增大了非常多?
如几十M的文件,加载后内存暴增几百兆---以前有过此现象
2.测试与分析
hoard对此的改善有多大?
int new_buf(int times,int size) {
for (int i=0;i<times;i++) {
new char[size];
}
return 0;
}
void main {
new_buf(1024*1024,1);
return;
}
分别用使用和未使用hoard的hotfox测试new_buf前后的内存占用情况。
使用和未使用hoard的hotfox执行程序大小分别为:1,140K和1,516K.
(使用hoard的怎么还小呢?)
专用工作集/工作集:单位K
未使用horad 使用hoard
申请前 7,156 /16,848 10,292/19,796
申请后 39,956/49,664 10,800/ 20,312
从简单的对比测试有以下结论:
。使用hoard,初始时需要占用约3,000K内存
。申请内存后内存占用差异非常大,使用hoard能节省大量内存,而且感觉速度更快
。申请的内存为1024*1024*1字节,怎么使用hoard的增量只有500K呢(10,800-10,292)?
使用vector
#include <vector>
using namespace std;
vector<char*> g_v;
int new_buf(int times,int size) {
for (int i=0;i<times;i++) {
g_v.push_back(new char[size]);
}
return 0;
}
void main {
int sz1 = sizeof(g_v); /// sz1=16
new_buf(1024*1024,1);
int sz2 = sizeof(g_v); /// sz2=16
return;
}
未使用horad 使用hoard
申请前 7,184 /16,908 10,328/19,904
申请后 44,104/53,844 15,056/ 24,640
申请内存后的差异:
使用hoard增加了4,728K.
g_v元素占用内存: 1024*1024*4=4096K. (char*长度4字节). ---这2个数值很接近。
初步结论
.利用hoard后,内存使用效率会得到明显提高。针对umx开发一个分配器发挥空间不大.
.服务程序最好升级到64位程序.
这里介绍了另一个内存分配器,与hoard类似.
http://www.cppblog.com/feixuwu/archive/2010/07/10/119980.aspx