gpt4 book ai didi

linux - 当底层物理内存用完时,如何处理访问 mmap 内存的总线错误?

转载 作者:太空狗 更新时间:2023-10-29 12:33:39 25 4
gpt4 key购买 nike

我们使用“shm_open”创建共享内存对象,然后使用“mmap”将其映射到内存区域。但是,稍后,当代码实际访问内存时,在某些极端情况下,由于底层物理内存耗尽,它会遇到“总线错误”。

这似乎是 Linux 中的通用事物,因为“mmap”仅映射虚拟内存地址空间,系统仅在您访问页面时分配实际物理内存。

我的问题是:我应该如何优雅地处理这样的“异常”?最佳做法是什么?我不希望程序在底层内存用完时崩溃,我想在这种情况下返回 ENOMEM。有办法实现吗?

谢谢。

最佳答案

在 Linux(使用 glibc)上,shm_open 创建的共享内存对象的实现是/dev/shm 中的实际文件。在正常情况下,在那个位置安装了一个带有默认选项的 tmpfs,即它的最大大小是物理内存的一半。如果这还不够,您可以创建文件以在有更多可用空间的其他地方映射,而不是使用 shm_open。

遇到这样的异常时,您几乎无能为力。特别是,您不能只返回 ENOMEM 或其他东西,因为异常是由对导致分配失败的 mmap 区域的任何写入引起的。这实际上可以是代码中对该区域的任何写入,编程语言中没有简单内存访问失败的概念,更不用说处理这种情况的方法了。

关于linux - 当底层物理内存用完时,如何处理访问 mmap 内存的总线错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391933/

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