我试图弄清楚在分配失败之前我可以分配多少内存.
这个简单的C++代码分配一个缓冲区(大小为1024字节),分配缓冲区的最后五个字符,报告,然后删除缓冲区.然后它将缓冲区的大小加倍并重复直到它失败.
除非我遗漏了某些东西,否则代码能够在MacBook Pro出现故障之前分配高达65TB的内存.这甚至可能吗?它如何分配比我在机器上更多的内存?我一定很遗憾.
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 …Run Code Online (Sandbox Code Playgroud)