存储映射(一)

本文探讨了普通文件读写方式的效率问题,特别是在处理大量数据时的不足。存储映射通过mmap函数实现,直接将文件物理地址映射到进程虚拟地址,避免了read/write函数的中间调用,提高了大文件操作的效率。虽然open操作仍需执行,但mmap显著提升了大数据量输入输出的速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储映射

普通读写文件方式的缺点

使用文件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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值