内存映射文件机制处理大文件
来源:互联网 发布:jdk1.8 64位 linux 编辑:程序博客网 时间:2024/05/17 23:06
内存映射文件机制处理大文件
先说结论:使用内存映射文件来处理大文件可以提高效率。
为什么呢?
我们先来看看如果不使用内存映射文件的处理流程是怎样的,首先我们得先读出磁盘文件的内容到内存中,然后修改,最后回写到磁盘上。第一步读磁盘文件是要经过一次系统调用的,它首先将文件内容从磁盘拷贝到内核空间的一个缓冲区,然后再将这些数据拷贝到用户空间,实际上是两次数据拷贝。第三步回写也一样也要经过两次数据拷贝。
所以我们基本上会有四次数据的拷贝了,因为大文件数据量很大,几十GB甚至更大,所以拷贝的开销是非常大的。
而内存映射文件是操作系统的提供的一种机制,可以减少这种不必要的数据拷贝,从而提高效率。它由mmap()将文件直接映射到用户空间,mmap()并没有进行数据拷贝,真正的数据拷贝是在缺页中断处理时进行的,由于mmap()将文件直接映射到用户空间,所以中断处理函数根据这个映射关系,直接将文件从硬盘拷贝到用户空间,所以只进行了一次数据拷贝 ,比read进行两次数据拷贝要好上一倍,因此,内存映射的效率要比read/write效率高。
一般来说,read write操作可以满足大多数文件操作的要求,但是对于某些特殊应用领域所需要的几十GB甚至更大的存储,这种通常的文件处理方法进行处理显然是行不通的。目前,对于上述大文件的操作一般是以内存映射文件的方式来加以处理的。
原文:http://blog.csdn.net/hongchangfirst/article/details/11599369
作者:hongchangfirst
hongchangfirst的主页:http://blog.csdn.net/hongchangfirst
- 内存映射文件机制处理大文件
- 内存映射文件机制处理大文件
- 内存映射文件机制处理大文件
- 内存映射文件机制处理大文件
- 内存映射文件机制处理大文件
- 使用内存映射文件处理大文件
- 内存映射文件----大文件处理----摘抄
- 内存映射文件处理大文件
- 内存映射文件处理大文件
- 使用内存映射文件处理大文件
- 利用内存映射文件处理大文件
- 内存映射文件处理大文件
- 大文件处理-内存文件映射
- Java中用内存映射处理大文件
- Java中用内存映射处理大文件 .
- Java中用内存映射处理大文件
- 分块内存映射处理大文件-例子
- Java中用内存映射处理大文件
- UVa 140 - Bandwidth
- 双项链表的添加删除
- POJ 2391 多源多汇拆点最大流 +flody+二分答案
- android 全局Dialog
- uC/OS中的TCB
- 内存映射文件机制处理大文件
- Redis学习
- 关于为何stm32的TIM2定时器时钟是72mhz而不是36mhz
- 工作杂记(三)
- Shared Source CLI 2.0 Directory Layout Overview
- Oracle删除(1)删除数据库
- QT各种数据格式转换
- 注册表整理
- JavaScript学习笔记(三)---JavaScript对象