【问题标题】:Allocated memory seen on Task Manager在任务管理器上看到的分配内存
【发布时间】:2020-04-12 10:43:56
【问题描述】:

我想分配 1 GB 的内存。假设 int 需要 4 个字节,要分配 1 GB,我需要一个包含 250000000 个元素的数组:

int main() { 
    string s;

    cout << "Program paused" << flush;
    getline(cin, s);
    int * p = new int[250000000]{};
    cout << "Program paused" << flush;
    getline(cin, s);
    delete [] p;
    cout << "Program paused" << flush;
    getline(cin, s);
}

Windows 任务管理器显示我的程序使用了 954 MB。为什么小于 1 GB?

编辑:任务管理器还显示操作系统为进程保留了 979,100 MB 的虚拟内存,但仍小于 1 GB。

【问题讨论】:

  • 虚拟内存部分怎么样?他可能会向您展示 RAM 中的内容
  • 私有活动工作集为 976,848 MB。如何查看虚拟内存?
  • 任务管理器显示操作系统为进程保留了 979,100 MB 的虚拟内存,但仍小于 1 GB

标签: c++ memory-management


【解决方案1】:

1 GB 是 1024x1024x1024 字节(按照惯例)

所以 250000000 x 4 小于 1GB。

所以您使用的是 (250000000 x 4) / (1024x1024) MB,大约为 953 MB

【讨论】:

  • 另外,如果你认为 1GB 并不是 Wikipedia 上关于 GiB (Gibibytes) 与 GB Gigabytes 的十亿字节阅读的问题
【解决方案2】:

250,000,000 bytes * 4 不是 1GB。记住一个千兆字节 (more accurately, a Gibibyte) 是 1024 兆字节 (mebibytes),每个兆字节是 1024 千字节 (kibibytes) 即 1024 字节。

分配你想要的 1 GiB(假设 sizeof(int) == 4):

const size_t len = ( 1024 * 1024 * 1024 ) / sizeof(int); // 268,435,456 
int* p = new int[ len ]{};

【讨论】:

  • @JohnZwinck Derp,哇——现在是凌晨 4 点——等等!
  • @JohnZwinck 那里,已修复! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多