mmap 内存映射

张开发
2026/4/10 2:09:52 15 分钟阅读

分享文章

mmap 内存映射
一、mmap 是什么内存映射把磁盘文件或匿名内存映射到进程的虚拟地址空间进程直接用指针读写像操作内存一样操作文件高效、少拷贝。二、核心作用1. 高效文件读写减少 read/write 数据拷贝实现零拷贝2. 进程间共享内存替代 shm更通用3. 加载动态库.so/.dll4. 大文件处理不用一次性读入内存三、基本原理封面级简图plaintext磁盘文件↓ 映射物理内存 ←→ 进程虚拟地址空间↑多个进程可同时映射 → 实现共享四、关键 APIcvoid *mmap(void *addr, // 建议映射地址size_t length, // 映射长度int prot, // 权限读/写/执行int flags, // 私有/共享/匿名int fd, // 文件描述符off_t offset // 文件偏移);- MAP_SHARED 修改会同步到文件多进程可见- MAP_PRIVATE 写时复制修改不写回文件- MAP_ANONYMOUS 匿名映射无文件用于进程间共享内存配套- munmap() 解除映射- msync() 同步回磁盘五、mmap vs 传统 read/write- read/write用户态 ←→ 内核态 两次拷贝- mmap直接访问减少一次拷贝更快六、mmap vs System V 共享内存shm- shm专用IPCAPI老依赖内核IPC对象- mmap通用可映射文件/匿名更灵活现代常用七、典型使用场景1. 高性能日志、数据库文件读写2. 多进程共享数据替代 shm3. 共享内存信号量同步4. 大文件分片处理八、注意事项1. 映射大小通常是页大小整数倍4K2. 越界访问会触发 SIGSEGV 段错误3. 多进程共享必须加同步互斥锁/信号量4. 异常断电可能导致文件不一致需 msync

更多文章