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

标签 linux mmap

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

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

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

最佳答案

如果在 mmap 之后立即使用,则 MADV_DONTNEED 无效。

要避免 Linux 3.4 及更高版本上的核心转储膨胀,您可以将 madviseMADV_DONTDUMP 一起使用。

关于linux - MADV_DONTNEED 在 mmap() 之后立即执行任何有用的操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57614416/

相关文章:

java - JNI MMAP 内存泄漏

c - 使用超出预期内存使用量的大型 mmap 调用是否会产生性能成本?

linux - Cron 作业神秘地停止运行?

linux - 基本程序输出重定向在 CentOS V.2.16.0 版本 5.8 中不起作用

/proc/self/exe 可以映射吗?

c++ - 是否有可能 malloc() 分配的缓冲区与使用 mmap() 分配的另一个缓冲区重叠?

c - 为什么当偏移量为非负数(但是是 sysconf(_SC_PAGE_SIZE) 的倍数)时 mmap 会因 EINVAL 而失败?

c - waitpid 的返回值

c - 如何在 Linux 上使用 C 在执行期间切换用户

Java OutOfMemory 异常 : mmap failed for CEN and END part of zip file