Windows核心編程 - 內存映射文件(3)

1. 用內存映射文件來處理大文件

    方法就是隻映射文件的一個視圖,這個視圖只包含文件的一小部分數據。比如一開始時,把文件開關的部分映射到視圖中,完成對視圖的訪問後,撤銷這一部分的映射,再把文件的另一部分映射到視圖,重複此過程,直至完成對整個文件的訪問。

2.內存映射文件和一致性

      系統允許把同一個文件中的數據映射到多個視圖中。例如把一個文件的前10KB映射到一個視圖A,把同一個文件的前4KB映射到視圖B,只是映射的是同一個文件映射對象,則系統會確保各視圖中的數據是一致的。

        如果應用程序在一個視圖中修改了文件的內容,則系統會更新該視圖對應文件映射對象的其它視圖。 原因是系統是在同一個內存頁面保存被映射的數據,即使該內存頁面被多次映射到進程的地址空間中。

       如果多個進程把同一個數據文件映射到多個視圖中,數據也會是一致的,因爲數據文件中的每個頁面在內存中只有一份。

3.用內存映射文件在進程間共享數據

    Windows提供了多種共享數據的機制,包括RPC、COM、OLE、DDE、Windows消息(尤其是WM_COPYDATA)、剪貼板、郵槽、管道、套接字等。其實共享數據最底層的機制是內存映射文件,這種共享機制是通過讓兩個或多個進程映射同一個文件映射對象的視圖來實現的,這意味着進程間共享相同的物理存儲頁面。因此,當一個進程在視圖中寫入數據時,其它進程會在它們的視圖中看到變化。注意:對於多個進程共享同一個文件映射對象,所有進程使用的文件映射 對象名稱必須完全相同。

4.以頁交換文件爲後備存儲器的內存映射文件

    許多程序在運行過程中創建一些數據,並需要將這些數據共享給其它進程,如果爲了共享數據而將創建的數據保存在磁盤上的文件中,這將非常不方便,效率也較低。一種較好的方式是以頁交換文件爲後備存儲器的內存映射文件,要實現這一點,只要在調用CreateFileMapping時,將INVALID_HANDLE_VALUE作爲hFile參數傳入,表示希望系統從頁交換文件中調拔物理存儲器。

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