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个数值很接近。
3.初步结论
.利用hoard后,内存使用效率会得到明显提高。针对umx开发一个分配器发挥空间不大.
.服务程序最好升级到64位程序.
这里介绍了另一个内存分配器,与hoard类似.
http://www.cppblog.com/feixuwu/archive/2010/07/10/119980.aspx