記憶體對映檔案程序間共享記憶體
記憶體對映檔案的另乙個功能是在程序間共享資料,它提供了不同程序共享記憶體的乙個有效
且簡單的方法。後面的許多例子都要用到共享記憶體。
共享記憶體主要是通過對映機制實現的。
windows 下程序的位址空間在邏輯上是相互隔離的,但在物理上卻是重疊的。所謂的重
對映檔案物件時,windows 即在物理記憶體申請一塊指定大小的記憶體區域,返回檔案對映物件
的控制代碼hmap。為了能夠訪問這塊記憶體區域必須呼叫mapviewoffile 函式,促使windows 將
此記憶體空間對映到程序的位址空間中。當在其他程序訪問這塊記憶體區域時,則必須使用
個對映。這樣一來,系統就把同一塊記憶體區域對映到了不同程序的位址空間中,從而達到共享
記憶體的目的。
下面舉例說明如何將記憶體對映檔案用於共享記憶體。
第一次執行這個例子時,它建立了共享記憶體,並寫入資料「123456」。只要建立共享記憶體
的程序沒有關閉控制代碼hmap,以後執行的程式就會讀出共享記憶體裡面的資料,並列印出來。這
就是使用共享記憶體在程序間通訊的過程。程式**如下。
[cpp]view plain
copy
print?
#include
#include
#include
void
main()
// 08sharemem工程下
else
// 解除檔案對映,關閉記憶體對映檔案物件控制代碼
::unmapviewoffile(pbuffer);
getchar(); // 注意,程序關閉後,所有控制代碼自動關閉,所以要在這裡暫停
::closehandle(hmap);
return
; }
開啟兩個程序發現結果如下:
1、寫入共享記憶體資料: 「123456」
2、讀出共享記憶體資料: 「123456」
使用記憶體檔案對映實現共享記憶體
不使用ipc中的共享記憶體 shm 使用記憶體檔案對映的方式來實現共享記憶體 共享記憶體寫入者 使用檔案記憶體對映進行記憶體共享 include include include include include include include include include include using...
c 實現記憶體對映檔案共享記憶體
記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作檔案,就像操作程序空間裡的位址一樣了,比如使用c語言的 memcpy等記憶體操作的函式。這種方法能夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理io效率比普通io效率要高 00001.using s...
檔案對映,共享記憶體的實現
檔案對映 mmap 實際上是乙個vma的建立過程,分配程序線性區來對映開啟的檔案,把對檔案的讀寫轉為對記憶體的讀寫,在頻繁移動指標讀寫檔案的時候,讀寫效率有很大的提高。mmap 函式會呼叫特定檔案系統的mmap 全部執行之後,線性區結構vm area struct的vm file指向對映檔案的檔案物...