MADV_DONTNEED 在 mmap() 之后立即执行任何有用的操作吗?

Is MADV_DONTNEED immediately after mmap() doing anything useful?

我正在创建一个使用大型 mmap() 匿名内存块的软件,其中大部分未使用 - 用于未来扩展。我目前正在使用 mmap() 分配它,然后告诉操作系统内核我实际上不需要使用 madvise(ptr, bytes, MADV_DONTNEED).

分配的页面

进行此 madvise() 调用有什么好处吗?我可以只使用 mmap() 分配内存吗?

我已经发现核心文件变得相当大,有很多 mmap()'d 内存,所以我处理 SIGSEGV 和其他一些信号以及 munmap() 我不想离开的部分到核心文件。

MADV_DONTNEED 如果在 mmap 之后立即使用则没有效果。

为了避免 Linux 3.4 及更高版本上的核心转储膨胀,您可以将 madviseMADV_DONTDUMP.

一起使用