首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么linux转储要将MAP_ANONYMOUS内存页面清理到核心转储?

为什么linux转储要将MAP_ANONYMOUS内存页面清理到核心转储?
EN

Stack Overflow用户
提问于 2011-12-27 06:01:30
回答 1查看 579关注 0票数 2

我想使用mmap将大的连续内存区域映射到我的进程中。这只是一个很大的预先分配的缓冲区,其中大部分不太可能每次都被使用。实际上,我可以创建my级的内存区域,即使这超出了我的物理内存+硬盘大小。当我访问映射区域中的地址时,Linux将在页面中进行映射。不幸的是,如果我在调用mmap之后生成一个核心转储,但在触及新的内存区域之前,核心转储将包括那个大的内存区域。为什么?Linux将不得不在一个新的页面中填满零容量的内存,仅仅是为了将其写出到核心文件中。

我为什么要这样做呢?如果我的生产者总是可以将数据附加到一个连续的缓冲区中,而我的消费者可以读取生产者后面的数据,并假设它的读头和生产者的写头之间的所有数据都是可使用的,那么我的代码将变得更简单和高效。我计划在我的读取头提前通过一个页面边界后使用me,让操作系统知道它不再需要为我保存这些内存页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-27 06:44:43

核心转储将包括该大内存区域。为什么?

因为在这些情况下内核没有被优化来减小核心文件大小。

内核很可能会查看给定内存区域中的每一页,并跳过所有未修改的页。不过,我不确定这样的补丁是否会被接受。

你可以使用google user-level coredumper来代替。它确实会修剪尾随的以零填充的页面。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8639399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档