从数组释放内存
Freeing Memory From An Array
我正在尝试内存分配和删除,并有一个关于如何正确删除/释放内存的问题。下面是一段非常小的代码:
#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
- Array Created 1120 KB
- Array Deleted 1124kb
那么我在c++教育中错过了什么吗?在delete[]被调用后,分配给数组的内存不应该被释放吗?
不,你没有错过任何东西。这只是任务管理器没有告诉你全部的真相(好吧,它没有从你需要的角度告诉你真相)。当程序调用delete[]
时,内存被释放供程序重用,但不会返回给操作系统。从程序的角度来看,内存被释放了:下一次调用new
将占用相同的内存块。但是从操作系统(和任务管理器)的角度来看,程序仍然占有内存。
要查看发生了什么,请多次运行分配,并在循环中执行释放,并查看任务管理器中的内存总量并没有从第一次分配后获得的"高水位"上升。
这取决于你使用的编译器。对于某些编译器,删除的内存由应用程序持有,不会立即返回到操作系统。很抱歉我现在找不到官方链接
相关文章:
- 包含矢量指针的结构的内存释放问题
- Valgrind 声称内存释放中的自由空间太多
- 当 C 和 C++ 中严格要求内存释放时
- C++ 中指针变量的内存释放
- 德克内存释放
- 临时对象 c++ 的内存释放
- C 全局对象变量内存释放
- C++矢量动态内存释放/删除
- 从 cv::Mat 初始化的 IplImage 的内存释放
- SWIG类型映射中的内存释放
- STL容器中的内存释放
- QWebView内存释放
- 内存释放 C++
- 大返回值(如字符串)的内存释放如何在C++中发生
- 重新分配之前的内存释放
- Linux C++ 中的内存释放
- VS2012编译器奇怪的内存释放问题
- 调试断言失败!错误的内存释放
- 负责 COM 互操作中的内存释放
- imread命令后OpenCV矩阵内存释放