当前位置: 代码迷 >> VC/MFC >> ,VC 2010 分配和释放内存特别慢
  详细解决方案

,VC 2010 分配和释放内存特别慢

热度:127   发布时间:2016-05-02 03:45:51.0
求助,VC 2010 分配和释放内存特别慢
我把问题简化成如下的代码:
int main()
{
int **pint1, **pint2;
int i, n;
n = 8 * 1024 * 1024;

pint1 = new int*[n];
pint2 = new int*[n];

for (i = 0; i < n; i++)
{
pint1[i] = new int[2];
pint2[i] = new int[2];
}

for (i = 0; i < n; i++)
{
delete []pint1[i];
delete []pint2[i];
}

delete pint1;
delete pint2;

return 0;
}

用VC2010编译,在第一个for循环中分配内存比较慢,但还可以忍受,第二个for循特别慢,二三十分钟;
测试在VC6.0,2005,2015下没有问题,几秒钟就完了;
但是我们单位的开发环境是VC2010,换的话比较麻烦;
请教各位大神有什么办法!!
------解决思路----------------------
第三方分配器(推荐dlmalloc).
大量小内存申请/释放是愚蠢的做法, 可以一次性分配大的, 自己一个一个分割, 好处是
一次错误处理, lz有没有想到new错误该怎么办, 这么多new每一个都可能致命
------解决思路----------------------
使用boost中的内存池,或者自己写一个,大概思路是一次直接申请一块很大的,然后在上面placement new分配对象,这样效率上去了,而且避免了内存碎片
  相关解决方案