Linux 記憶體對映的必要性

2021-10-06 01:37:02 字數 926 閱讀 8433

引用:

在非記憶體對映的情況下,檔案讀寫方式為io讀寫。

檔案i/o的讀操作:

會先向檔案裝置發起讀請求,然後驅動把請求要讀的資料讀取到檔案的緩衝區中,這個緩衝區位於核心,然後再把這個緩衝區中的資料複製到程式虛擬位址空間中的一塊區域中。

檔案i/o的寫操作:

會向檔案裝置發起寫請求,驅動把要寫入的資料複製到程式的緩衝區中,位於使用者空間,然後再把這個緩衝區的資料複製到檔案的緩衝區中。

檔案i/o弊端:

讀和寫操作均涉及複製操作,讀寫效率與檔案大小成反比。即檔案越大,讀寫效率越低。

是把位於硬碟中的檔案看做是程式位址空間中一塊區域對應的物理儲存器,檔案的資料就是這塊區域記憶體中對應的資料,讀寫檔案中的資料,直接對這塊區域的位址操作,就可以,減少了記憶體複製的環節。

用記憶體對映檔案處理儲存於磁碟上的檔案時,將不必再對檔案執行i/o操作,這意味著在對檔案進行處理時將不必再為檔案申請並分配快取,所有的檔案快取操作均由系統直接管理,由於取消了將檔案資料載入到記憶體、資料從記憶體到檔案的回寫以及釋放記憶體塊等步驟,使得記憶體對映檔案在處理大資料量的檔案時能起到相當重要的作用。

使用記憶體對映後,系統能夠為你管理所有的檔案快取操作。不必分配任何記憶體,或者將檔案資料載入到記憶體,也不必將資料重新寫入該檔案,或者釋放任何記憶體塊。但是,記憶體對映檔案仍然可能出現因為電源故障之類的程序中斷而造成資料被破壞的問題。

其實就是把所有檔案操作先放到記憶體中,但又不必開大記憶體。

實際工程中的系統往往需要在多個程序之間共享資料,如果資料量小,處理方法是靈活多變的,如果共享資料容量巨大,那麼就需要借助於記憶體對映檔案來進行。實際上,記憶體對映檔案正是解決本地多個程序間資料共享的最有效方法。

this的必要性

先看下面一段 lesson8 necessary of this class person show name public void showinfo class demo 8 1 this屬於乙個物件,代表的是物件,其實就是乙個物件的引用,只能在類定義的方法中使用。那麼它代表那個物件呢?答 哪個...

it 的必要性

for std vector iterator itlocal m vecsoftwareer.begin itlocal m vecsoftwareer.end else it 如上所示,c 98中map erase並沒有返回值為iterator的原型函式。那麼問題來了it map.erase i...

sh c的必要性

在linux使用 echo 並配合命令重定向是實現向檔案中寫入資訊的快捷方式。比如要向 test.asc 檔案中隨便寫入點內容,可以 echo 資訊 test.asc 或者 echo 資訊 test.asc 下面,如果將 test.asc 許可權設定為只有 root 使用者才有許可權進行寫操作 su...