mmap使得可以将设备内存映射到用户空间,从而使得用户程序获得访问硬件的能力,mmap的动作需要由内核中的驱动来实现。在使用mmap映射后,用户程序对给定范围的内存的读写就变成了对设备内存的读写,也就是在访问设备了。

并不是所有的硬件都支持mmap,比如串口设备就不支持mmap。mmap存在一个限制,就是它映射的粒度为PAGE_SIZE,因而内核只能在页表一级对虚拟内存地址进行管理,因而使用mmap将设备内存映射到用户进程的虚拟内存空间时必须以页为单位,并且内核被映射的物理地址也必须起始于PAGE_SIZE的整数倍,即被映射的物理地址的起始地址必须对齐到PAGE_SIZE上。

---------------------

作者:goodluckwhh

来源:CSDN

原文:https://blog.csdn.net/goodluckwhh/article/details/16870101

版权声明:本文为博主原创文章,转载请附上博文链接!

但 mmap方式只适用于更新、读写一块固定大小的文件区域而不能做像诸如不断的写内容进入文件导到文件增长这类的事。

https://blog.csdn.net/qq100440110/article/details/52104311

在一般的文件读写中,会有两次数据拷贝,一次是从硬盘拷贝到操作系统内核,另一次是从操作系统内核拷贝到用户态的应用程序。而在内存映射文件中,一般情况下,只有一次拷贝,且内存分配在操作系统内核,应用程序访问的就是操作系统的内核内存空间,这显然要比普通的读写效率更高。

内存映射文件的另一个重要特点是,它可以被多个不同的应用程序共享,多个程序可以映射同一个文件,映射到同一块内存区域,一个程序对内存的修改,可以让其他程序也看到,这使得它特别适合用于不同应用程序之间的通信。比普通的基于loopback接口的Socket要快10倍。

简单总结下,对于一般的文件读写不需要使用内存映射文件,但如果处理的是大文件,要求极高的读写效率,比如数据库系统或繁忙的电子交易系统,或者需要在不同程序间进行共享和通信,那就可以考虑内存映射文件。

最新文章

  1. 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序
  2. 基于ASP.NET/C#开发国外支付平台(Paypal)学习心得。
  3. 【Android环境搭建】解决安装使用SDK Manager更新时的问题
  4. django开发个人简易Blog——数据模型
  5. 【HDU 1445】Ride to School
  6. winrar激活
  7. Phpcms·二次开发
  8. VirtualBox 局域网独立主机设置
  9. pat 1001 A+B Format
  10. centos7防火墙导致不能访问的
  11. python移植环境
  12. react ref获取dom对象
  13. 安装 sshpass
  14. PHP多进程非阻塞模式下结合原生Mysql与单进程效率测试对比
  15. TI 实时操作系统SYS/BIOS使用总结
  16. 黄聪:如何配置Emeditor实现代码智能识别自动完成功能
  17. [Android] 开发第十天
  18. EDEM 2018 + Fluent 19.0耦合
  19. vue-cli新建一个项目
  20. 160406、mybatis批量删除

热门文章

  1. Ubuntu安装谷歌浏览器
  2. Config Server高可用
  3. 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
  4. 【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4
  5. Java中的锁——锁的分类
  6. 给zTree的treeNode添加class
  7. WPF:使用TypeConverter
  8. 设计模式系列之策略模式(Strategy Pattern)
  9. linux下的QT打包方法
  10. asp.net core参数保护之自定义要保护的参数类型