C++中用mmap映射大文件需先open获取fd并fstat得真实大小,mmap时length须准确、offset页对齐,PROT和MAP标志按读写需求选择,失败检查用MAP_FAILED,访问前校验边界,修改后msync同步,最后munmap释放。

在 C++ 中用 mmap 映射大文件,核心是绕过标准 I/O 缓存,直接让文件内容“变成”进程的虚拟内存,读写就像操作普通指针一样——不拷贝、不阻塞、效率高。
映射文件前先打开并获取大小
必须用 open() 以合适权限打开文件(如 O_RDONLY 或 O_RDWR),再用 fstat() 拿到真实大小。mmap() 的 length 参数不能随便估,必须准确,否则可能映射失败或越界。
- 只读映射推荐用
PROT_READ+MAP_PRIVATE - 需要修改并同步回磁盘,用
PROT_READ | PROT_WRITE+MAP_SHARED -
offset必须是页对齐的(通常getpagesize(),一般为 4096),不足时需向下取整并调整起始地址偏移
调用 mmap 获取映射地址
成功时返回指向映射内存的指针;失败返回 MAP_FAILED(即 (void*)-1),必须检查。不要用 nullptr 判断失败。
示例关键代码:
立即学习“C++免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~