加载中...

mmap 是 Unix/Linux 的内存映射系统调用,可把文件内容或匿名内存区域映射到进程的虚拟地址空间,之后读写该段内存即等价于读写文件,由内核按需换页。
文件映射建立时并不实际读取数据,首次访问触发缺页异常,内核从页缓存(或磁盘)载入对应页。MAP_SHARED 映射的修改会写回文件并对其他映射者可见;MAP_PRIVATE 则采用写时复制,修改仅本进程可见。MAP_ANONYMOUS 用于分配纯内存,malloc 分配大块内存时底层即用它。
mmap 广泛用于:加载可执行文件与共享库、数据库引擎(如 LMDB、SQLite 可选 mmap 模式)、大文件随机访问、进程间共享内存等。
优点是省去 read/write 的用户态拷贝、按需加载、天然与页缓存共享;缺点是缺页开销不可控、错误以 SIGBUS 信号而非返回值呈现、脏页回写时机难以精确掌握。

登录 后参与讨论
暂无讨论,来发表第一条评论吧