+ -
当前位置:首页 → 问答吧 → 求助-内存释放的问题

求助-内存释放的问题

时间:2011-12-11

来源:互联网

我一直在试图养成释放内存的好习惯,可这个问题真的打败我了
我试图释放一个vector<list<valid*>*>* pre_ccs和它里面所有元素的内存,下面是我写的代码
pre_ccs代表一个稀疏矩阵,维度在20w*5000,每个list<valid*>代表一列,一列大约1000个元素,共5000列。

class valid{
public:
valid(int r, double v):row(r), value(v){};
int row;
double value;
}

void destroy(vector<list<valid*>*>* pre_ccs){
for(vector<list<valid*>*>::iterator iter = pre_ccs->begin(); iter != pre_ccs->end(); iter++){
list<valid*>* curr = *iter;
for(list<valid*>::iterator liter = curr->begin(); liter != curr->end(); liter++)
delete *liter;
curr->clear();
}
pre_ccs->clear();
delete pre_ccs;
}
这段代码,可以运行,可问题在于耗时太久了。比初始化时候久,比插入元素时候久,甚至比做矩阵乘法时候还久,那可是把每个list都遍历了几千遍呢。
在release下,我等了10分钟,才释放掉了300列,将近300000个元素。
我不知道哪里出问题了,请神人斧正。就这样的效率,我甚至宁愿不释放它,无非也就是40M左右的溢出罢了。

作者: xxpxxxxp   发布时间: 2011-12-11

应该是内存太零碎了,以至于查找的时候耗时太长,试试自己写new和delete,对内存做好预分配
或者修改vector分配内存的参数

作者: hnwyllmm   发布时间: 2011-12-12

热门下载

更多