求助-内存释放的问题
时间: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左右的溢出罢了。
我试图释放一个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分配内存的参数
或者修改vector分配内存的参数
作者: hnwyllmm 发布时间: 2011-12-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28