delete失败的问题,非新手问题
最近遇到一个比较诡异的问题,初步猜测可能和windows的内存回收机制有关
出问题的代码如下
- C/C++ code
for(i = 0; i < vecSeg.size(); i ++ ) { SEG *item = NULL; item = vecSeg[i]; delete item; } if (1) { std::vector<SEG*> Stmp; //释放vector占用的空间 //vecSeg.swap(Stmp); Stmp.swap(vecSeg); }vecSeg定义 std::vector<SEG*> vecSeg;
运行到这段代码处,该vector占用了400多M内存,整个进程占内存1.6G左右,但是通过这种方式释放不掉。而同样的这段代码,往前移动过某些语句可以正常释放。
google了一下,发现一篇帖子
http://bbs.chinaunix.net/thread-351706-1-1.html
其中提到了内存的半释放和完全释放的概念,但是网上资料很少,有没有高人指点一下?
[解决办法]
swap释放的是容器本身的内存,这一点没有问题
vs2008 release /Od
- C/C++ code
#define breakpoint _asm int 3int main(){ vector<int*> vec((int)1e8); breakpoint // 400MB allocated { vector<int*> temp; temp.swap(vec); } breakpoint // 400MB released return 0;}
[解决办法]
想知道你初始化代码是怎么写的,怎么申请空间的
[解决办法]
SEG是不是重载了operator delete/new? 有自己的free list,没有真正释放内存到堆?