如何在c++中使用mmap进行内存映射文件 高效处理大文件【系统编程】

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

如何在c++中使用mmap进行内存映射文件 高效处理大文件【系统编程】-第1张图片-佛山资讯网

在 C++ 中用 mmap 映射大文件,核心是绕过标准 I/O 缓存,直接让文件内容“变成”进程的虚拟内存,读写就像操作普通指针一样——不拷贝、不阻塞、效率高。

映射文件前先打开并获取大小

必须用 open() 以合适权限打开文件(如 O_RDONLYO_RDWR),再用 fstat() 拿到真实大小。mmap()length 参数不能随便估,必须准确,否则可能映射失败或越界。

  • 只读映射推荐用 PROT_READ + MAP_PRIVATE
  • 需要修改并同步回磁盘,用 PROT_READ | PROT_WRITE + MAP_SHARED
  • offset 必须是页对齐的(通常 getpagesize(),一般为 4096),不足时需向下取整并调整起始地址偏移

调用 mmap 获取映射地址

成功时返回指向映射内存的指针;失败返回 MAP_FAILED(即 (void*)-1),必须检查。不要用 nullptr 判断失败。

示例关键代码:

立即学习“C++免费学习笔记(深入)”;

标签: 字节 虚拟内存 ai c++ red igs

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~