我试图弄清楚在分配失败之前我可以分配多少内存。
这个简单的 C++ 代码分配一个缓冲区(大小为 1024 字节),分配给缓冲区的最后五个字符,报告,然后删除缓冲区。然后它将缓冲区的大小加倍并重复,直到失败。
除非我遗漏了什么,否则代码最多可以在我的 MacBook Pro 上分配 65 TB 的内存。这甚至可能吗?它如何分配比我机器上更多的内存?我一定错过了一些简单的东西。
int main(int argc, char *argv[])
{
long long size=1024;
long cnt=0;
while (true)
{
char *buffer = new char[size];
// Assume the alloc succeeded. We are looking for the failure after all.
// Try to write to the allocated memory, may fail
buffer[size-5] = 'T';
buffer[size-4] = 'e';
buffer[size-3] = 's';
buffer[size-2] = 't';
buffer[size-1] = '\0';
// report
if (cnt<10)
cout << "size[" << cnt << "]: " << (size/1024.) << "Kb ";
else if (cnt<20)
cout << "size[" << cnt << "]: " << (size/1024./1024.) << "Mb ";
else
cout << "size[" << cnt << "]: " << (size/1024./1024./1024.) << "Gi ";
cout << "addr: 0x" << (long)buffer << " ";
cout << "str: " << &buffer[size-5] << "\n";
// cleanup
delete [] buffer;
// double size and continue
size *= 2;
cnt++;
}
return 0;
}
最佳答案
当您请求内存时,操作系统保留在您实际使用之前不实际给该内存的权利。
这就是这里发生的事情:您只使用了 5 个字节。我 1980 年代的 ZX81 可以应付。
关于c++ - 我可以在 MacBook Pro 上分配的最大内存量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400317/