Skip to content
困难

一句话答案

mmap 将文件映射到进程虚拟地址空间,读写内存即读写文件,减少一次用户/内核态数据拷贝,RocketMQ 使用。

核心要点

原理: 建立虚拟地址 → 文件页的映射,访问时触发缺页加载

应用: RocketMQ(消息存储) / MongoDB(存储引擎) / 共享内存(进程通信)

vs read/write: mmap 少一次拷贝,适合大文件随机读写

追问与易错

追问方向:

  • mmap 和 read 区别?
  • 适合什么场景?
  • RocketMQ 为什么用 mmap?

易错点:

  • ❌ mmap 比 read 永远快——小文件不一定
  • ❌ mmap 不占内存——占虚拟地址空间

💡 记忆锚点

mmap像在文件和内存之间开了一扇"任意门":把文件直接映射到进程地址空间,读写内存就等于读写文件,省掉了传统read/write中"内核缓冲区→用户缓冲区"的那一次搬运。访问时才按需加载(缺页中断),适合大文件随机读写。RocketMQ用它做消息存储,MongoDB用它做存储引擎。