欢迎光临
我们一直在努力

mmap 到底快在哪里?从数据拷贝、缺页异常到零拷贝机制

在 Linux 开发中,处理文件通常有两种非常常见的方式:

一种是传统的 open + read + write,另一种则是 mmap 内存映射。

很多人对 mmap 的理解停留在一句话:

mmap 很快,因为它是“零拷贝”。

这句话不能说完全错误,但并不严谨。

mmap 并不是让磁盘数据凭空出现在用户程序中,也不是完全没有任何数据复制。它真正改变的是:

文件数据进入内存后,用户程序不再需要通过 read() 再把数据从内核页缓存复制到自己的用户缓冲区,而是直接将文件页映射到进程虚拟地址空间。

换句话说:

传统 read() 的思路是:

内核帮你把数据拿出来,再复制一份交给你。

而 mmap 的思路是:

数据不用搬给你,直接给你一张“访问这块内存的地址”。

这看似只是一次 API 的区别,背后实际上涉及 Linux 的页缓存、虚拟内存、页表、缺页异常以及 MMU 地址转换机制。


一、传统 read:数据为什么要“搬两次”?

先来看最普通的文件读取:

赞(0)
未经允许不得转载:171主机测评 » mmap 到底快在哪里?从数据拷贝、缺页异常到零拷贝机制
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址