c++ - malloc什么时候不调用mmap?
问题描述
我正在大学学习操作系统,我的任务之一是找到malloc()
不会导致mmap()
系统调用的情况。
我使用strace
linux 实用程序来跟踪系统调用,但在我的情况下,mmap()
每次使用时我都会看到系统调用malloc()
。
总是malloc()
打电话mmap()
还是不打电话?
谢谢
解决方案
这既不是由 C、C++ 或 POSIX 标准定义的。
malloc() 是否总是调用 mmap() ?
不一定。这取决于malloc
实现、配置和分配的大小以及可能的其他因素。
如果使用 glibc:
可调:glibc.malloc.mmap_threshold
此可调参数取代了 MALLOC_MMAP_THRESHOLD_ 环境变量并且在功能上是相同的。
设置此可调参数后,所有大于此值(以字节为单位)的块都将使用 mmap 系统调用在正常堆外分配。这样可以保证这些块的内存可以免费返回给系统。请注意,小于此阈值的请求仍可能通过 mmap 分配。
如果未设置此可调参数,则默认值设置为“131072”字节,并动态调整阈值以适应程序的分配模式。如果设置了可调参数,则禁用动态调整并将值设置为静态。
如果不使用 glibc,请查阅您使用的实现的文档或源代码。
推荐阅读
- javascript - 如何通过输入字段更改滑块?
- android - 如何在“使用数据访问”打开之前显示一条消息,以便用户在颤振中授予权限
- python - 在 Amazon Linux 2 上启动时执行 python 脚本
- html - 悬停效果设置文本不透明度
- sql - 比较 Hive 查询与不同连接顺序的效率
- r - Highcharter Shiny 批量命令行渲染和导出
- sql - T-SQL 返回表的所有组合
- database - 如何将 CSV 文件导入两个相关的 PostgreSQL 表?
- python - 如何在python中删除或合并拼写错误的行?使用 pandas 或其他库
- android - React Native Android zIndex 提升而不重新排列