0

我正在尝试内存分配和删除,并且对如何正确删除/释放内存有疑问。下面是一小段代码:

#include <windows.h>
#include <vector>
#include <iostream>

using namespace std;

int main() {
    cout << "Initial" << endl;
    system("Pause");

    double* Array = new double[50000];
    for(int i = 0; i < 50000; i++)
    {
        Array[i] = rand();
    }

    cout << "Array created" << endl;
    system("Pause");

    delete[] Array;

    cout << "Array deleted" << endl;
    system("Pause");

    return 1;
}

在每次系统暂停期间,我使用 Windows 任务管理器检查我的应用程序正在使用多少内存。以下是我的结果中的数字:

  • 初始 744 KB
  • 阵列已创建 1120 KB
  • 阵列已删除 1124 KB

那么我在我的 C++ 教育中错过了什么吗?调用 delete[] 后是否应该不释放为数组分配的内存?

4

2 回答 2

3

不,你没有错过任何东西。只是任务管理器并没有告诉你全部真相(好吧,它并没有从你需要的角度告诉你真相)。程序调用delete[]时,内存会被释放以供程序重用,但不会返回给操作系统。从您的程序的角度来看,内存已被释放:您的下一次调用new将占用相同的内存块。但从操作系统(和任务管理器)的角度来看,程序仍然保留内存。

要查看发生了什么,请多次运行分配,然后循环释放,并查看任务管理器中的内存总量没有从第一次分配后获得的“高水位线”上升。

于 2013-01-07T04:14:23.300 回答
0

这取决于您使用的编译器。对于某些编译器,删除的内存由应用程序持有,不会立即返回到操作系统。抱歉,我现在找不到有关它的官方链接。

于 2013-01-07T04:18:46.217 回答