我正在尝试内存分配和删除,并对如何正确删除/释放内存有疑问。下面是一个非常小的工作代码:
#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任务管理器检查我的应用程序使用了多少内存。以下是我的结果中的数字:
我在C ++教育中错过了什么?在调用delete []后,是否应该释放为数组分配的内存?
答案 0 :(得分:3)
不,你没有错过任何东西。只是任务经理没有告诉你全部真相(好吧,它并没有从你需要的角度告诉你真相)。编程调用delete[]
时,内存将被释放以供程序重用,但不会返回给操作系统。从您的程序的角度来看,内存被释放:您的new
的下一次调用将声明相同的内存块。但是从操作系统(和任务管理器)的角度来看,程序仍然保留在内存中。
要查看正在发生的事情,请多次运行您的分配,并在循环中解除分配,并查看任务管理器中的内存总量不会从第一个后面的“高水位线”上升分配
答案 1 :(得分:0)
这取决于您使用的编译器。对于某些编译器,删除的内存由应用程序保留,而不是立即返回到OS。 很抱歉,我现在找不到关于它的官方链接。