2

看下面的 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;

Process MyProgram.exe 在 Windows 任务管理器中占用大约 700KB。

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

4

2 回答 2

3

释放内存时,标准内存分配器不会(通常)将内存释放给操作系统。相反,它将保留它以供您的流程进行后续分配。

因此,即使您释放了 TM,您也不会看到 TM 中的内存使用量减少。

于 2012-11-13T11:17:20.820 回答
3

操作系统/调试环境可能会采用优化技术,而您的内存释放可能只是将其返回到池中;实际的内存释放可能发生在程序终止时

于 2012-11-13T11:17:37.860 回答