c++ - 从数组中释放内存

标签 c++ arrays memory

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

#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[]后是否应该为数组分配的内存不被释放?

最佳答案

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

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

关于c++ - 从数组中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189759/

相关文章:

java - 我的循环出了什么问题?不断收到 NoSuchElementException

c - 声明空数组

c++ - OpenGL 2D HUD 不显示

c++ - 关于 IncludePath 的 MinGW 和 Perl 冲突

c++ - Python sprintf 和 memset 操作

javascript - 数组中的元素自动更新

javascript - JavaScript 中数组的最大值

c++ - 如何知道当前正在移动哪个 QGraphicsItem?

C 在 Union 中释放一个字符串

memory - 多级页表如何节省内存空间?