內存映射文件處理大文件

先說結論:使用內存映射文件來處理大文件可以提高效率。 

爲什麼呢?

我們先來看看如果不使用內存映射文件的處理流程是怎樣的,首先我們得先讀出磁盤文件的內容到內存中,然後修改,最後回寫到磁盤上。第一步讀磁盤文件是要經過一次系統調用的,它首先將文件內容從磁盤拷貝到內核空間的一個緩衝區,然後再將這些數據拷貝到用戶空間,實際上是兩次數據拷貝。第三步回寫也一樣也要經過兩次數據拷貝。

所以我們基本上會有四次數據的拷貝了,因爲大文件數據量很大,幾十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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章