linux下的記憶體對映檔案無法寫回

2021-04-16 15:44:53 字數 377 閱讀 5836

最近剛剛轉到linux下程式設計,在用mmap/msync的時候發現怎麼都不能把記憶體改動寫回檔案 ,mmap,msync都返回0,但是檔案內容就是沒變,後來經過試驗發現對是mmap引數理解錯誤的問題

因為我一開始不想與其它程序共享記憶體對映,所以設定了 map_private引數,而此引數所謂"the segment is private, changes are local"的解釋是指所有的改動都只有這個程序可見,別的程序不可見,再說的明白一點,就是改動只在該程序的記憶體空間中進行,不會影晌其它程序,也不會影響檔案的內容,所以再呼叫msync也就不管用了。

總結:錯誤表現:記憶體對映檔案無法寫回

錯誤原因:設定了map_private

改正:         改用map_shared

記憶體對映檔案

記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作文 件,就像操作程序空間裡的位址一樣了,比如使用 memcpy 等記憶體操作的函式。這種方法能 夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理 io效率比 普通 io效率要高。另外,unix 把它做...

記憶體對映檔案

記憶體對映檔案有三種,第一種是可執行檔案的對映,第二種是資料檔案的對映,第三種是借助頁面交換檔案的記憶體對映.應用程式本身可以使用後兩種記憶體對映.1.可執行檔案對映 windows在執行乙個win32應用程式時使用的是記憶體對映檔案技術.系統先在程序位址空間的0x00400000以上保留乙個足夠大...

記憶體檔案對映

一直都對記憶體對映檔案這個概念很模糊,不知道它和虛擬記憶體有什麼區別,而且對映這個詞也很讓人迷茫,今天終於搞清楚了。下面,我先解釋一下我對對映這個詞的理解,再區分一下幾個容易混淆的概念,之後,什麼是記憶體對映就很明朗了。首先,對映 這個詞,就和數學課上說的 一一對映 是乙個意思,就是建立一種一一對應...