为什么分配大块内存会失败,而重新分配小块内存却不会失败

2024-05-05

这段代码的结果是x指向一块大小为 100GB 的内存。

#include <stdlib.h>
#include <stdio.h>

int main() {
    auto x = malloc(1);
    for (int i = 1; i< 1024; ++i) x = realloc(x, i*1024ULL*1024*100);
    while (true); // Give us time to check top
}

虽然这段代码分配失败。

#include <stdlib.h>
#include <stdio.h>

int main() {
    auto x = malloc(1024ULL*1024*100*1024);
    printf("%llu\n", x);
    while (true); // Give us time to check top
}

我的猜测是,您的系统内存大小小于您尝试分配的 100 GiB。尽管 Linux 确实会过度使用内存,但它仍然会放弃远远超出其所能满足的请求。这就是第二个例子失败的原因。

另一方面,第一个示例的许多小增量远低于该阈值。因此,它们中的每一个都会成功,因为内核知道您还不需要任何先前的内存,因此它没有迹象表明它将无法支持这 100 个额外的 MiB。

我相信进程的内存请求失败时的阈值与可用 RAM 相关,并且可以对其进行调整(尽管我不记得具体如何调整)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么分配大块内存会失败,而重新分配小块内存却不会失败 的相关文章

随机推荐

  • 垂直滚动不适用于 Mobile Safari

    由于某些原因 当我在移动 Safari iOS 9 1 iPhone 5 Safari 8 1 上访问我的网站时 垂直滚动无法正常工作 https sleepy anchorage 3222 herokuapp com https slee
  • Google BigQuery:检索每行的最后版本

    我有一个 Google BigQuery 表 其中包含所有版本的资源 每次创建 更新 删除资源时 都会添加一个新行 并递增版本号 该数字将是添加行时的时间戳 ID ResourceID Action Count Timestamp ABC
  • 使用节点http代理转发http代理

    我正在使用 node http proxy 库来创建转发代理服务器 我最终计划使用一些中间件来动态修改 html 代码 这就是我的代理服务器代码的样子 var httpProxy require http proxy httpProxy c
  • 没有 OutputInterface 的 Symfony2 控制台输出

    我正在尝试使用 Symfony 控制台命令将一些信息打印到控制台 通常你会做这样的事情 protected function execute InputInterface input OutputInterface output name
  • 嵌入式+实时开发培训的建议[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我目前正在学习嵌入式实时工程职业 但发现找到好的培训材料有些困难 特别是因为您无法像桌面应用程序开发那
  • 使用 BeagleBone Black 内核 >= 3.8 打开/关闭 USB 电源

    我需要 关闭 gt 睡眠几秒钟 gt 打开 beaglebone black 的 USB 电源 能够对连接到 USB 的设备 华为 E220 调制解调器 进行硬件重置 已经尝试过软重置 使用取消绑定 绑定和授权0 1 但软件重置不足以使设备
  • 如何在 Facebook 中嵌入 iframe?

    我的一位同事为我们工作的公司维护着一个 Facebook 页面 该公司希望在他们的 Facebook 上放置一个小部件 以允许用户输入他们的电子邮件并订阅我们的时事通讯 做 Facebook 的同事不是程序员 所以他让我做一些东西 我制作了
  • jQuery 动画 .prepend

    我不想简单地将 HTML 转储到我希望其动画的页面中 而是如何将下面的 jQuery 更改为插入 HTML 时动画或向下滑动 button click function j tweets ul prepend j refreshMe ul
  • python 线程是如何工作的?

    我想知道 python 线程是并发运行还是并行运行 例如 如果我有两个任务并在两个线程中运行它们 它们是同时运行还是计划同时运行 我知道GIL并且线程仅使用一个 CPU 核心 这是一个复杂的问题 需要大量解释 我将坚持使用 CPython
  • Python-从Excel文件读取时间时未获得正确的日期时间

    我有一个 Excel 文件 其中有 3 列作为日期时间或日期或时间字段 我正在通过阅读它xlrd包裹 我有时间milliseconds我想当我尝试将其转换回日期时间时我得到了错误的结果 我尝试将文件转换为csv以及 这也没有帮助 我得到了我
  • 如何设置 PHP CodeSniffer 来扩展 WordPress 编码标准 + VSCode 中的自动修复错误?

    如何使用扩展 WordPress 编码标准的个人规则为项目设置 PHP CodeSniffer 保存时在 VSCode 中自动修复错误 I have 全局安装 CodeSniffer https github com squizlabs P
  • Java 中修剪字符串的可能前缀

    I have String str 我想从中提取不包括可能的前缀的子字符串 abc 我想到的第一个解决方案是 if str startsWith abc return str substring abc length return str
  • 樱桃选择问题:还应用了之前提交的更改

    在我的项目中 我几个月前发布了一个版本 在该版本发布之后 我在 master 分支上做了很多更改 如果我遇到上一个版本中存在的一些错误 我会在主分支上修复它们 然后将它们挑选到我在上一个版本中创建的分支 然后我可以提供一个仅包含错误修复的新
  • 在 UNIX 时间戳 Shell/Bash 中将日期与时区转换

    我需要将日期从格式为 yyyy mm dd hh mm ss TZ 的字符串转换为 UNIX 时间 TZ 时区 到目前为止我所做的是将没有时区的 yyyy mm dd hh mm ss 格式的日期转换为时间戳 dateYMD 2019 2
  • 单击“提交”后如何将 Google 表单(新版本)重定向到自定义 URL

    新版本的 Google Forms 很好 但它缺少 1 个关键功能 这应该很容易 但我不知道如何实现它 创建 Google 表单时 一旦访问者点击 提交 我想将他们重定向到自定义网址或自定义感谢页面 即http cnn com http c
  • pytorch 的 IDE 自动完成

    我正在使用 Visual Studio 代码 最近尝试了风筝 这两者似乎都没有 pytorch 的自动完成功能 这些工具可以吗 如果没有 有人可以推荐一个可以的编辑器吗 谢谢你 使用Pycharmhttps www jetbrains co
  • 将“-Filter”与变量一起使用

    我尝试过滤掉这样的东西 Get ADComputer Filter name like chalmw dm and Enabled eq true 这就像一个魅力 并且得到了我想要的 现在我想要 类似名称 部分作为变量 如下所示 Get A
  • 使用 Geoserver 中的 Javascript 动态设置 WMS 图层样式

    我的 Web 应用程序通过 Geoserver 2 6 0 从 Postgis 向 OpenLayers 地图提供 WMS 图层 工作正常且符合预期 用户可以通过 WMS 图层的属性 通过 HTML 中的下拉框 过滤 WMS 图层的某些元素
  • “推”匹配 UIInterpolatingMotionEffect? (即访问 UIInterpolatingMotionEffect 上的“物理”)

    借助 UIInterpolatingMotionEffect 扭转 iPhone 即可让图像移动 现在 想象一个红色块 您将使用 UICollisionBehavior 和 UIDynamicItemBehavior 在屏幕上 弹跳 当用户
  • 为什么分配大块内存会失败,而重新分配小块内存却不会失败

    这段代码的结果是x指向一块大小为 100GB 的内存 include