c++ - 我可以在 MacBook Pro 上分配的最大内存量是多少?

标签 c++ memory allocation

我试图弄清楚在分配失败之前我可以分配多少内存。

这个简单的 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/

相关文章:

c++ - 在函数中使用非静态值作为默认参数

c++ - Visual Studio 中的 OpenGL - GLEW 的问题

javascript - 我正在测试 ArrayBuffer 并想知道为什么结果看起来像这样 :

c++ - gp_camera_file_get 是如何工作的?

c++ - new 似乎没有办法增加或缩小分配?

c++ - 最大重叠事件数的持续时间

c++ - 无法对包含字符串 C++ 的结构数组进行操作

c++ - 如何在 Sieve_of_Eratosthenes 中使用更少的内存

c - 尝试找出在为数组分配的堆内存中分配值期间的错误