对mmap和 munmap的理解
一、整体概念1. mmap全称 memory map内存映射 作用将文件/匿名内存映射到进程的虚拟地址空间进程直接通过指针读写这块内存等价于读写文件/共享内存大幅减少IO拷贝。2. munmap全称 unmap memory解除内存映射 作用释放 mmap 申请的虚拟内存区域切断进程地址空间和文件/共享内存的关联是 mmap 配套释放函数必须成对使用否则内存泄漏。二、mmap 函数原型#include sys/mman.hvoid *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);返回值成功返回映射区起始指针失败返回 MAP_FAILED。参数详解addr 期望映射到的虚拟地址填 NULL 让内核自动分配推荐。length 要映射的字节长度。prot 内存访问权限PROT_READ可读PROT_WRITE可写PROT_EXEC可执行flags 映射模式二选一核心MAP_SHARED共享映射 修改内存会同步到磁盘其他进程可见读写文件用这个。MAP_PRIVATE私有映射写时复制 COW 修改只会在当前进程生效不会改动原文件。 额外标记MAP_ANONYMOUS 匿名映射无文件用于进程间共享内存fd 文件描述符 映射普通文件填 open 得到的fd匿名映射填 -1。offset 文件偏移 从文件哪个位置开始映射必须是系统页大小通常4096的整数倍。三、munmap 函数原型int munmap(void *addr, size_t length);addrmmap 返回的映射起始地址length和 mmap 传入的长度保持一致 返回值成功0失败-1munmap 做了什么切断虚拟地址和内核页缓存/磁盘文件的映射关系释放该段虚拟内存进程再也不能访问这片地址若是 MAP_SHARED 修改过的数据会由内核异步刷盘不保证立刻落地重要数据要提前调用 msync进程退出时内核会自动执行 munmap但规范代码必须手动调用。四、两种映射场景场景1文件映射最常用流程 open 打开文件 → mmap 把文件映射到内存 → 指针直接读写 → msync可选强制刷盘→ munmap 释放 → close 关闭文件。数据优势传统 read/write 存在两次拷贝磁盘→内核缓存→用户缓冲区mmap 只有一次DMA拷贝零用户缓冲区拷贝性能更高。场景2匿名共享映射进程间IPCflags MAP_SHARED | MAP_ANONYMOUSfd-1 父子进程共享同一块物理内存不用创建磁盘文件用来做简易共享内存。五、简单可运行示例#include stdio.h#include stdlib.h#include unistd.h#include fcntl.h#include sys/mman.h#include sys/stat.hint main() {// 1. 打开文件int fd open(test.txt, O_RDWR);if (fd 0) {perror(open); exit(1);}// 获取文件大小struct stat st;fstat(fd, st);size_t len st.st_size;// 2. mmap 创建映射char *p mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);if (p MAP_FAILED) {perror(mmap); close(fd); exit(1);} // 直接操作内存等价操作文件printf(文件内容%s\n, p);p[0] X; // 修改会同步到文件// 3. munmap 解除映射关键释放步骤if (munmap(p, len) -1) {perror(munmap);}close(fd);return 0;}六、核心特性与注意事项mmap 特点懒加载调用 mmap 时不会加载文件到内存访问地址触发缺页中断才从磁盘读数据按页分配最小单位一页4KB映射很小文件会浪费内存随机读写友好数据库、大文件解析大量使用。munmap 常见坑地址、长度必须和 mmap 严格对应否则释放失败munmap 只是解除映射不关闭文件描述符fd 仍需手动 close忘记调用 munmap 会造成虚拟内存泄漏长期运行服务内存占用持续上涨未 msync 直接 munmap修改的数据内核会后台慢慢刷盘程序崩溃可能丢数据。七、mmap 和 munmap 配对总结mmap分配一段虚拟内存绑定文件/共享内存拿到可读写指针业务逻辑通过指针读写数据munmap归还虚拟内存解除映射是 mmap 必不可少的收尾操作。0voice · GitHub

相关新闻

小程序 毕设项目:基于 SpringBoot + 小程序的非遗畲文化推广交易系统 福建畲族民俗内容分享与文创交易小程序 (源码+文档,讲解、调试运行,定制等)

小程序 毕设项目:基于 SpringBoot + 小程序的非遗畲文化推广交易系统 福建畲族民俗内容分享与文创交易小程序 (源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/13 21:52:36 阅读更多 →
【HarmonyOS NEXT】引导用户跳转APP设置详情页开启权限

【HarmonyOS NEXT】引导用户跳转APP设置详情页开启权限

在 HarmonyOS NEXT 中,用户一旦在系统授权弹窗中点击“拒绝”,系统将不会再弹出第二次授权弹窗。在这种情况下,最佳实践是引导用户前往系统设置的“应用详情页”手动开启权限。本文将详细介绍如何在应用中实现这一引导流程。核心步骤与代码实…

2026/7/13 21:50:35 阅读更多 →
鸿蒙 构建系统:hvigor-config.json5文件

鸿蒙 构建系统:hvigor-config.json5文件

在鸿蒙应用开发中,hvigor-config.json5是Hvigor构建系统的核心配置文件。一、配置文件整体结构hvigor-config.json5文件整体的结构如下:modelVersion dependencies execution ├── analyze ├── daemon ├── incremental ├── parallel ├── t…

2026/7/13 21:50:35 阅读更多 →

最新新闻

VC++运行库版本兼容性解析:从2005到2026,5个关键版本与Windows系统匹配

VC++运行库版本兼容性解析:从2005到2026,5个关键版本与Windows系统匹配

VC运行库版本兼容性全景指南:从系统适配到故障排查在Windows平台上开发或运行应用程序时,Visual C Redistributable运行库的版本兼容性问题常常成为技术人员的痛点。本文将深入解析从2005到2026年间各主要VC运行库版本的系统兼容性规则、二进制兼容机制&…

2026/7/13 22:34:47 阅读更多 →
Qt 5 + CMake 项目在 WSL 2 下的 VSCode 调试配置:3 步实现断点与变量监控

Qt 5 + CMake 项目在 WSL 2 下的 VSCode 调试配置:3 步实现断点与变量监控

Qt 5 CMake 项目在 WSL 2 下的 VSCode 调试配置:3 步实现断点与变量监控对于需要在 Linux 环境下进行 Qt GUI 或后端逻辑调试的开发者来说,WSL 2 VSCode 的组合提供了接近原生 Linux 的开发体验。本文将重点讲解如何利用 VSCode 的调试功能&#xff0c…

2026/7/13 22:34:47 阅读更多 →
ADS 模型导入排错指南:5 种常见报错(如路径/格式/版本)的定位与修复

ADS 模型导入排错指南:5 种常见报错(如路径/格式/版本)的定位与修复

ADS模型导入排错实战:5类典型报错的深度诊断与修复方案在射频电路设计与仿真领域,ADS(Advanced Design System)作为行业标准工具,其模型导入环节往往成为新手工程师的第一个"拦路虎"。当设计热情遭遇冰冷的报…

2026/7/13 22:32:46 阅读更多 →
2026零基础用大学生学习辅助录音工具避坑包教包会可直接上手

2026零基础用大学生学习辅助录音工具避坑包教包会可直接上手

"2026零基础想找好用的大学生学习辅助录音工具,解决上课记不全内容、复习效率低的问题,我整理了完整的避坑指南和上手方法,都是我和身边同学踩过无数坑试出来的,零基础看完就能直接用,没有复杂操作,都…

2026/7/13 22:32:46 阅读更多 →
Topaz Video AI视频修复技术解析与应用指南

Topaz Video AI视频修复技术解析与应用指南

1. 视频修复神器Topaz Video AI深度解析作为一名长期从事视频处理工作的从业者,我亲测过市面上绝大多数视频修复工具。Topaz Video AI这款软件确实让我眼前一亮——它不仅能够免费快速修复各种视频质量问题,其AI算法的强大程度简直可以用"离谱"…

2026/7/13 22:28:45 阅读更多 →
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第一章:企业数据库设计规范

MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第一章:企业数据库设计规范

一、企业数据库设计流程企业开发一般遵循下面的流程:需求分析↓ 抽取业务实体↓ 分析实体之间关系↓ 设计表结构↓ 设计索引↓ 评审数据库设计↓ 正式建表例如:开发一个图书管理系统。需求:用户可以: 借书 还书 查看图书首先抽取实…

2026/7/13 22:26:45 阅读更多 →

日新闻

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:01:19 阅读更多 →
浦东旧模块回收哪家强?专业评测带你一探究竟

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

2026/7/13 0:01:19 阅读更多 →
卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

2026/7/13 0:05:20 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/13 4:38:36 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/13 4:38:38 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/13 4:38:40 阅读更多 →

月新闻