【发布时间】:2010-10-24 09:51:41
【问题描述】:
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() 比其他任何事情都更像是一个谜……渴望了解您的工具而不是对基本原理感到惊讶。
【问题讨论】:
-
您是否检查了 GetLastError() 和 errno 以获取更多信息?
-
@blank:将其发布为答案,我会投票给你!
标签: windows memory 64-bit malloc virtual-memory