2014-06-16 172 views
4

我是將大文件(〜200GB)映射到單個區域/視圖並按順序寫入內存的內存。我偶爾會執行一個boost::interprocess::mapped_region::flush(last, current, false)釋放內存映射內存

過了一段時間,過程耗盡整個系統內存。據我所知,這是正常的,因爲它將釋放內存作爲其他進程請求內存。

這在Windows 8上運行良好。但是,在Windows 7上運行時,似乎無法與AJA視頻卡的驅動程序一起運行,並且它開始影響性能(丟棄IO數據包)。

有沒有什麼辦法可以強制Windows 7將內存的一部分刷新到磁盤(寫入數據後只有幾秒鐘有趣,並且記住我正在按順序遍歷整個文件),如不使用整個可用的系統內存?

+3

請評論是否爲-1。 – ronag

回答

3

法拉盛與填海,IYAM沒有任何關係。它只是確保髒頁被寫出(我認爲你仍然需要磁盤同步來確保它實際上/擊中了磁盤/)。

所以,你正在尋找一種解除映射的方法。

也許你可以使用一個功能類似

當然,在一個更便攜的方式,你可能會離開unmapping和remapping。如果訪問是旋轉HDD並且在重映射中保持順序,則可能不會有性能損失(如果內核預取數據(例如由於madvise()或與其等效的窗口)可能沒有性能損失)