2014-06-22 28 views
1

爲什麼不提升進程間支持只寫內存映射?只寫內存映射在boost?

也許我錯過了一些東西,但不會寫只有映射顯着快於讀/寫映射,因爲操作系統不需要從磁盤讀取頁面,只需從內存中清除頁面磁盤?它也有完全非阻塞的好處(除了沖洗和破壞)。

我會從升壓切換到本機操作系統內存映射受益嗎?

回答

1

事實上,如果你分配一個新的大小內存映射文件,比如說20Gb,你會得到一個稀疏的文件大小分配。

當在該文件的「映射」頁面中,需要進行讀取操作(因爲操作系統可能能夠判斷該頁面在物理上還沒有存在於磁盤上),並且只有當(如果)這些頁面被弄髒需要他們寫出來。

當然,這是依賴於實現的,我不認爲POSIX(可以)保證這一點,但它不是不合理的行爲IYAM,並且相當於只寫映射。

0

實際上,只寫memmap不會更快,因爲操作系統只能跟蹤更改/在整頁粒度中提供這些映射。

至少,如果你想避免模擬所有訪問這些頁面在kernel-land(未實現)而不是僅僅映射頁面的高昂成本。

不知怎的,我懷疑直接到OS API,而不是去通過升壓-API可以提供任何顯著速度起坐:

升壓API是一個瘦包裝在特定的操作系統界面和會完全內聯,並由任何體面的編譯器編譯出來。

+0

我考慮OS API的原因是因爲它允許只寫映射。雖然,我不確定這是否有任何實際區別。 – ronag

+0

不確定整個頁面增量必須與只寫和讀/寫之間的區別? – ronag

+0

你的問題是詢問是否只寫一個文件的映射文件會更快,這對於答案很重要。嗯.. *粒度*會更好。 – Deduplicator