存储映射(一)

存储映射

普通读写文件方式的缺点

使用文件IO的read、write来进行文件的普通读写时,函数经过层层的调用后,才能够最终操作到文件,比如我们可以读

效率低

(read函数)为例:

应用层 read(fd, buf, sizeof(buf)); //buf应用缓存

-------------------|------------------------------------------

OS层 |

xxx1_read(**, xxx1_buf, **); //xxx_buf1内存缓冲

xxx2_read(**,xxx2_buf, **); //xxx_buf2内存缓冲

xxxn_read(**,xxxn_buf, **); //xxx_bufn内核缓冲

--------------------|-----------------------------------------

文件

以上画的只是一个示意的过程,不是说这些函数就一定叫这样的名字,但是不管怎么说上图能够很好反映出。

在读写时中间会有很多的调用过程,数据需要在不同的缓存间倒腾,最终才能从文件到应用缓存,或者从应用缓存到文件,效率很低。

疑问:为什么中间经过一系列的折腾后效率会很低呢?

  1. cpu执行一堆函数,很耗费cpu资源,而且浪费时间。
  2. 中间一堆的缓存都是函数从内存开辟的,浪费内存资源,而且数据在各缓存间折腾时也很耗费时间

总之read、write这种普通读写文件的方式效率不高,那效率不高

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
存储映射(Memory Map)是一种将文件或设备的内容映射到进程的地址空间中的技术。通过存储映射,进程可以直接访问文件或设备的内容,而无需进行繁琐的读写操作。存储映射可以提高访问速度,并且可以实现多个进程之间的共享访问。 存储映射有两种主要的用途:文件内存映射和共享内存。 文件内存映射是将一个文件映射到进程的地址空间中,使得进程可以像访问内存一样访问文件的内容。通过使用mmap系统调用,可以将一个文件映射到内存中,并通过指针来访问文件的内容。这种方式可以提高文件的读写速度,并且可以方便地进行随机访问。 共享内存是一种最快的进程间通信方式,它允许多个进程共享同一块内存区域。在共享内存中,多个进程可以同时访问同一块内存,实现数据的共享。共享内存可以使用不同的接口,如Posix接口和System V接口。通过使用shm_open()和mmap()函数,可以创建和访问共享内存区域。 总结来说,存储映射是一种将文件或设备的内容映射到进程的地址空间中的技术。文件内存映射可以提高文件的读写速度,而共享内存可以实现多个进程之间的数据共享。 #### 引用[.reference_title] - *1* *2* [linux下共享内存sharedMemory(shm)和内存映射memorymap的关系](https://blog.csdn.net/jinking01/article/details/120274820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Memory Map(Linux 存储映射IO)](https://blog.csdn.net/a931040/article/details/51955693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值