malloc() 失败的原因是什么,尤其是在 64 位中?
我的具体问题是试图在 64 位系统上分配 10GB 的巨大 RAM 块。这台机器有 12GB 的 RAM 和 32GB 的交换空间。是的,malloc 是极端的,但为什么会有问题呢?这是在带有 Intel 和 MSFT 编译器的 Windows XP64 中。malloc 有时会成功,有时不会,大约 50%。8GB malloc 总是有效,20GB malloc 总是失败。如果 malloc 失败,重复请求将不起作用,除非我退出该进程并再次启动一个新进程(然后将有 50% 的成功率)。没有其他大型应用程序正在运行。它甚至在重新启动后立即发生。
如果您用完了可用的 32(或 31)位地址空间,我可以想象 malloc 在 32 位中失败,这样就没有足够大的地址范围来分配给您的请求。
如果你用完了物理 RAM和硬盘交换空间,我也可以想象 malloc 会失败。这不是我的情况。
但是为什么 malloc 会失败呢?我想不出其他原因。
我对一般 malloc 问题比我的具体示例更感兴趣,无论如何我可能会用内存映射文件替换它。失败的 malloc() 比其他任何事情都更像是一个谜……渴望了解您的工具而不是对基本原理感到惊讶。