微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows – 64位大型mallocs

malloc()会失败的原因是什么,特别是在64位?

我的具体问题是尝试在64位系统上配置一个巨大的10GB大块RAM.
该机器具有12GB的RAM和32 GB的互换.
是的,malloc是极端的,但为什么会是一个问题?这是在Windows XP64与英特尔和MSFT编译器. malloc有时会成功,有时候不会达到约50%. 8GB的mallocs一直工作,20GB的malloc总是失败.如果一个malloc失败,重复的请求将不起作用,除非我退出该过程,并重新开始一个新的进程(然后这将有50%的成功).没有其他大型应用程序正在运行.它会在新的重新启动后立即发生.

如果您使用了32位(或31)位的可用地址空间,我可以想象一个malloc失败的32位,这样就没有足够大的地址范围来分配给您的请求.

如果您用完了物理RAM和硬盘驱动器交换空间,我也可以想象malloc失败.对我来说不是这样.

但是为什么malloc也可能失败?我不能想到其他原因.

我对一般的malloc问题比我的具体例子更感兴趣,我可能会替代内存映射文件.失败的malloc()只是一个比其他任何东西更难的东西…,希望了解你的工具,而不是让基础知识感到惊讶.

malloc尝试分配一个连续的内存范围,这首先是由于交换内存的工作原理(至少在我记得的时候)才会在真正的内存中.可能很容易的是,您的操作系统有时无法找到10gb的内存的连续块,并且仍然将所有需要真正内存的进程同时留在RAM中(此时您的malloc将失败).

你实际上是否需要10gb的连续内存,或者你能够围绕几个更小的块包装一个存储类/结构体,而不是使用你的内存块呢?这放宽了巨大的连续需求,并且还应允许您的程序使用交换文件来使用较少使用的块.

原文地址:https://www.jb51.cc/windows/371545.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐