在任务管理器上看到的已分配内存

问题描述 投票:0回答:1

我想分配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。

c++ memory-management
1个回答
1
投票

250,000,000 bytes * 4not 1GB。请记住,千兆字节(more accurately, a Gibibyte)为1024兆字节(兆字节),每个兆字节为1024千字节(兆字节),即1024字节。

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

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

2
投票

1 GB为1024x1024x1024字节(按惯例)

因此250000000 x 4小于1GB。

所以您正在使用(250000000 x 4)/(1024x1024)MB,大约953 MB

© www.soinside.com 2019 - 2024. All rights reserved.