不能簡單說哪個效率高,無論哪種方法,無非都是os幫你在記憶體cache了,然後再某時刻fl
ush到記憶體。mmap能非常方便的簡化對檔案的操作,而且效率可能會比直接讀寫檔案高。
引了幾段話:
「這個問題較複雜,不能簡單地說用mmap比block buffer快。
它們之間的主要區別在於使用mmap時是系統來管理buffer。
若是使用者管理buffer,當你使用的buffer太大,使得系統記憶體緊張而造成淘汰,則將造成整
機效能的極大下降;而若使用的buffer太小,又體現不出用buffer的好處。因此,系統比
使用者更能找到使用buffer合適的量。
使用mmap的另乙個好處是可以避免不必要的拷貝,方便程式設計。考慮這樣的例子:將乙個正
文檔案的所有內容反排(即abcd變成dcba),用緩衝及mmap的方法分別實現對比看看。可
以參考<windows核心程式設計>,講得很清楚。 」
「這種方式未見得比繞過緩衝直接dma的方式快,當對大檔案讀寫且是連續大塊讀寫時,應
該是直接io更快。 」
「並且使用mmap會使解決問題的思路發生比較大的變化,整個系統可能會簡單清晰一些。d
ma是快,但不可移植,因此mmap比read/write快是一種通常的說法。 」
「mmap與read/write兩條路線對檔案的訪問比較
無論是通過mmap方式或read/write方式訪問檔案在核心中都必須經過兩個快取:乙個是用a
ddress_space來組織的以頁為基礎的快取;乙個是以buffer來組織的快取,但實際上這兩
個快取只是同乙個緩衝池裡內容的不同組織方式。當需要從檔案讀寫內容時,都經過 add
ress_space_operation中提供的函式也就是說路徑是一致的。
如果是用read/write方式,使用者須向核心指定要讀多少,核心再把得到的內容從核心緩衝
池拷向使用者空間;寫也須要有乙個大致如此的過程。mmap的優勢在於通過把檔案的某一塊
內容對映到使用者空間上,使用者可以直接向核心緩衝池讀寫這一塊內容,這樣一來就少了內
核與使用者空間的來回拷貝所以通常更快。但 mmap方式只適用於更新、讀寫一塊固定大小的
檔案區域而不能做像諸如不斷的寫內容進入檔案導到檔案增長這類的事。
MMAP和read的區別
mmap操作提供了一種機制,讓使用者程式直接訪問裝置記憶體,這種機制,相比較在使用者空間和核心空間互相拷貝資料,效率更高。在要求高效能的應用中比較常用。mmap對映記憶體必須是頁面大小的整數倍,面向流的裝置不能進行mmap,mmap的實現和硬體有關。mmap 系統呼叫使得程序之間通過對映同乙個普通檔...
Mmap 實現原理和應用(流程)
在除錯完達文西的視屏輸入後記錄一下除錯心得。重點還是再次放在系統呼叫mmap後的記憶體分配上。做了乙個mmap系統呼叫的筆記以及記錄以備後用。大致介紹了linux中對於mmap的應用以及後續產生缺頁異常處理的乙個流程。由於之前的除錯中一直對於vma的區域選取產生疑問,不知道vma到底是何許人也,這次...
Mmap的實現原理和應用
1,普通的read write和mmap後的對映區域的讀寫到底有什麼區別。2,為什麼有時候會選擇mmap而放棄普通的read write。圍繞著這兩個問題分析一下,其實在考慮這些問題的同時不免和其他的很多系統機制產生互動。雖然是講解mmap,但是很多知識還是為了闡明問題做必要的鋪墊。這些知識也正是l...