用C ++释放内存(VS2008)

时间:2012-11-13 11:11:03

标签: c++

查看以下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。

我的问题是:为什么程序占用的内存增加了?我想我已经准确释放了内存〜为什么?

2 个答案:

答案 0 :(得分:3)

标准内存分配器在解除分配时不会(通常)向操作系统释放内存。相反,它会将其保留用于您的流程的后续分配。

因此,即使您取消分配,也看不到TM中的内存消息减少。

答案 1 :(得分:3)

OS / Debug环境可能采用优化技术,释放内存可能只是将其返回池中;实际的内存释放可能发生在程序终止