news 2026/5/3 8:26:06

从内核到用户态:彻底搞懂mmap的原理与使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从内核到用户态:彻底搞懂mmap的原理与使用

写C/C++,离不开文件IO。

read、write、fread、fwrite,这几个函数每个程序员都在用,但你有没有想过,当你读一个1GB的大文件时,数据在内存里被拷贝了多少次?更重要的是,有没有一种方法,能让你像访问内存一样访问文件,而且性能还更好?

有。这就是mmap。

这篇文章,我会从传统IO的问题讲起,一步步带你理解mmap的底层原理,最后给出一个现代C++的封装方案。文章有点长,但看完你会对Linux内存映射有一个全新的认识。


一、为什么需要mmap?

先说结论:传统IO拷贝次数太多,系统调用开销太大,随机访问效率太低。

这三个问题,在小文件、顺序读写的场景里可能感知不明显,但在大文件、随机访问的场景下,每一个都是性能杀手。

1.1 传统IO的4次拷贝

我们来看一个最常见的场景:从磁盘读取文件内容,然后通过网络发送出去。

charbuf[4096];while
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 5:13:50

3分钟快速部署Open-AutoGLM到安卓手机,无需Root权限的极简方案

第一章:Open-AutoGLM怎么部署到自己手机上将 Open-AutoGLM 部署到手机上,可以通过 Termux 这一 Android 终端模拟器实现本地大模型的运行。该方案依赖轻量化推理框架与模型量化技术,使中高端手机也能承载基础对话功能。环境准备 安装 Termux …

作者头像 李华
网站建设 2026/4/27 5:28:33

通用AI认知方法论:不追热点,追源头;不囤信息,做翻译

开篇 研究AI最容易掉进两个陷阱:第一个是把“产品更新”当作“能力进化”,每天追功能、追榜单、追演示,信息越多越焦虑;第二个是把“懂概念”当作“会落地”,你可以把术语讲得很熟练,但一回到真实工作就发现…

作者头像 李华
网站建设 2026/4/30 0:23:40

自动驾驶—CARLA仿真(28)地图与导航(Maps and navigation)

地图(The map) 一张地图既包含城镇的3D模型,也包含其道路定义。地图的道路定义基于OpenDRIVE文件——一种标准化、带注释的道路定义格式。OpenDRIVE 1.4标准对道路、车道、交叉口等元素的定义方式,决定了Python API的功能及其设计…

作者头像 李华