查看以下C ++代码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Buf
{
public:
Buf(size_t size)
{
_storage.reserve(size);
}
~Buf()
{
vector<int> temp;
_storage.swap( temp );//release memory
}
vector<int> _storage;
};
int main()
{
int i = 0;
while( ++i < 10000)
{
Buf *buf = new Buf(100000);
delete buf;
}
return 0;
}
我在调试模式下运行它(VS2008):当我在行中设置断点
时//main function
int i = 0;
我发现进程MyProgram.exe在Windows任务管理器中占用大约300KB内存。当我在行中设置断点时
return 0;
进程MyProgram.exe在Windows任务管理器中占用大约700KB。
我的问题是:为什么程序占用的内存增加了?我想我已经准确释放了内存〜为什么?
答案 0 :(得分:3)
标准内存分配器在解除分配时不会(通常)向操作系统释放内存。相反,它会将其保留用于您的流程的后续分配。
因此,即使您取消分配,也看不到TM中的内存消息减少。
答案 1 :(得分:3)
OS / Debug环境可能采用优化技术,释放内存可能只是将其返回池中;实际的内存释放可能发生在程序终止
上