当前位置: 首页 > article >正文

Boost:内存映射文件

内存映射文件,是将一个文件全部或部分映射到进程的内存地址空间中,完成映射后,进程可以直接通过映射后的内存地址的读写完成对硬盘上文件的读写。

内存映射文件的好处在与,通过普通的read/write系统调用,需要先通过文件系统和驱动程序将硬盘的数据拷贝到内核空间中,然后再将内核空间的数据拷贝到用户空间。而内存映射文件在完成映射后,当进程访问对应的内存地址后,会出发缺页中断,然后缺页中断会通过mmap将硬盘的文件内从直接映射到内存地址上,也就是通过内存映射文件可以节省一次内存数据的拷贝。对于需要频繁进行读写操作的文件,通过内存映射文件可以大大的提供读写效率。

1.创建内存映射文件对象

#include <boost/interprocess/file_mapping.hpp>

file_mapping mFile("./mfile",read_write);

2.将文件映射到内存

mapped_region mRegion
   ( mFile                       //Memory-mappable object
   , read_write               //Access mode
   , offset                       //Offset from the beginning of shm
   , length                      //length of the map region
   ); 

注:映射时可以指定从文件的某个偏移地址开始映射,同时也可以指定映射区域的大小。如果未指定偏移量或大小,则整个文件被映射。如果仅指定了偏移量而没有指定大小,则映射区域覆盖了从偏移量到文件


http://www.kler.cn/a/157229.html

相关文章:

  • Android OpenGL ES详解——纹理:纹理过滤GL_NEAREST和GL_LINEAR的区别
  • JDBC-Dao层模式
  • 万字长文解读深度学习——卷积神经网络CNN
  • vue2面试题6|[2024-11-11]
  • SpringBoot(十三)SpringBoot配置webSocket
  • iOS 18.2 重磅更新:6个大动作
  • C++ 指针详解
  • mysql which is not in SELECT list; this is incompatible with DISTINCT解决方案
  • Module build failed: Error: ENOENT: no such file or directory
  • 现在的00后,实在是太卷了......
  • springboot遇到的问题02
  • 【前端系列】前端存档术之keep-alive
  • 微信开发者工具里面模拟操作返回、录屏、网络速度、截屏等操作
  • Java-easyExcel入门教程
  • 认知觉醒(三)
  • 水库监管AI视觉算法与边缘计算盒子
  • 什么是数据增强,为什么会让模型更健壮?
  • 电子学会C/C++编程等级考试2022年06月(四级)真题解析
  • 解释LED显示屏的裸眼3D特效原理
  • 第一个小记录达成:第一个年费会员用户
  • 计算社会学发展
  • Android wifi 框架以及Enable流程
  • 质量小议35 -- SQL注入
  • 【NI-RIO入门】Real Time(实时系统解释)
  • 开发工具idea中推荐插件
  • Flink入门之部署(二)