我想分配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。
250,000,000 bytes * 4
是not 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 ]{};
1 GB为1024x1024x1024字节(按惯例)
因此250000000 x 4小于1GB。
所以您正在使用(250000000 x 4)/(1024x1024)MB,大约953 MB