gpt4 book ai didi

c - 为什么 calloc 无法在具有 4GB RAM 的系统上分配 1GB?

转载 作者:可可西里 更新时间:2023-11-01 14:45:19 33 4
gpt4 key购买 nike

我为 1 个超过 1 GB 的元素调用了 calloc。此调用返回 NULL,检查 errno 会发现内存不足错误。然而,在测试过程中,我有将近 4 GB 的空闲 RAM,更不用说可用的虚拟内存了。

在研究了这个问题之后,我唯一能想到的是 calloc 失败的原因是我没有足够的 contiguous 可用内存。但是,在我看来,如果我有 4Gb 可用内存,那么拥有 ~= 1Gb 连续内存应该很容易。有没有办法检查连续的内存可用性?如果这是问题所在,是否有直接的方法对内存进行“碎片整理”?

或者这是否与分配内存的 block 大小有关,以至于它实际上试图分配比我可用的内存更多的内存?确定失败原因的选项有哪些?要成功分配这么多内存,我有哪些选择?

我在具有 12Gb 内存的 native Windows 系统上。接下来我将尝试在 VM 中运行,并为 VM 提供数 GB 的内存,并检查虚拟机是否可以非透明地访问足够的连续内存。如果我今天完成,我会在这里发布结果。

最佳答案

要取得成功,一个重要的关键是为您的应用程序提供 1GB 的虚拟地址空间。对于 32 位 Windows 应用程序,默认情况是应用程序开始时有 2GB 的地址空间。

如果您在失败的应用程序之前在您的应用程序中进行了很多分配,则很可能您已经划出了足够多的原始地址空间,以至于没有留下 1GB 的连续地址空间。应用程序可以只执行两个小的“战略性放置”分配,这会打断地址空间,使剩余部分都小于 1GB。

关于c - 为什么 calloc 无法在具有 4GB RAM 的系统上分配 1GB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118040/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com