加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – 64位大型mallocs

发布时间:2020-12-13 20:24:06 所属栏目:Windows 来源:网络整理
导读:malloc()会失败的原因是什么,特别是在64位? 我的具体问题是尝试在64位系统上配置一个巨大的10GB大块RAM. 该机器具有12GB的RAM和32 GB的互换. 是的,malloc是极端的,但为什么会是一个问题?这是在Windows XP64与英特尔和MSFT编译器. malloc有时会成功,有时候
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的连续内存,或者你能够围绕几个更小的块包装一个存储类/结构体,而不是使用你的内存块呢?这放宽了巨大的连续需求,并且还应允许您的程序使用交换文件来使用较少使用的块.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读