【发布时间】:2013-10-15 22:07:03
【问题描述】:
我们使用“shm_open”创建一个共享内存对象,然后“mmap”将它映射到一个内存区域。但是,在以后的时间,当代码实际访问内存时,在某些极端情况下,由于底层物理内存耗尽,它会遇到“总线错误”。
这似乎是 Linux 中的通用事物,因为“mmap”仅映射虚拟内存地址空间,系统仅在您访问页面时分配实际物理内存。
我的问题是:我应该如何优雅地处理这种“异常”?最佳实践是什么?我不希望当底层内存耗尽时程序崩溃,我想在这种情况下返回 ENOMEM。有没有办法做到这一点?
谢谢。
【问题讨论】:
-
如果您忘记了
ftruncate,也会发生总线错误。另见:stackoverflow.com/a/31877230/895245