memory-mapped-files

    4熱度

    2回答

    我正在重新學習C++,並且需要使用內存映射文件。我決定使用boost(因爲它似乎是堅實的庫)。 我創建了一個內存映射文件映射到一個雙精度數組,並寫在這個數組中的第一個double。磁盤文件包含前四個字節中的一些數據,其餘部分歸零,這對我來說很好奇,因爲通常如果我在C++中獲取指向內存位置的指針,在大多數情況下,我必須假定它包含垃圾。 我有任何保證新創建的內存映射文件將被清零(至少在Linux上)?

    7熱度

    1回答

    內存映射文件(根據規範)在很大程度上取決於操作系統的實際實現,並且一些這些未知方面已經在javadoc中進行了解釋。不過,我還有一些其他問題,不知道在哪裏尋求答案。 假設application A將文件映射到內存從position=0到size=10。 我會假設操作系統需要一個連續的內存映射它?或者這是依賴於實現? 現在假設我們有一個application B,其映射從position=0到siz

    0熱度

    1回答

    我試圖用MappedMemoryBuffer從文件中存儲/刪除部分字節。 Atm中,我使用了以下方法:我在緩衝區中有一個位置標記文件中的數據結尾(緩衝區比文件稍大一些以容納追加)。每個數據塊都是固定長度的,比方說200個字節。 我首先關心的是文件末尾的「標記」。我可以看到兩種方法: 使用某種標記來表示實際數據的結束,而文件大小可能更大(由於我爲了追加原因而保持略大一點)。想出一些獨特的字節序列可能

    1熱度

    1回答

    我正在使用內存映射文件進行跨進程數據共享。 我有兩個進程,一個寫入數據塊和一個或多個讀取這些塊的其他進程。爲了讓讀者知道一個塊是否準備就緒,我正在寫兩個「標籤」值,一個在開始處,一個在每個塊的末尾,表示已準備就緒。 它看起來是這樣的: 注意:在這個例子中,我不包括的事實,讀者進程可以尋求到以前的塊。 static const int32_t START_TAG = 0xFAFAFAFA; sta

    4熱度

    1回答

    我是將大文件(〜200GB)映射到單個區域/視圖並按順序寫入內存的內存。我偶爾會執行一個boost::interprocess::mapped_region::flush(last, current, false)。 過了一段時間,過程耗盡整個系統內存。據我所知,這是正常的,因爲它將釋放內存作爲其他進程請求內存。 這在Windows 8上運行良好。但是,在Windows 7上運行時,似乎無法與AJ

    1熱度

    2回答

    爲什麼不提升進程間支持只寫內存映射? 也許我錯過了一些東西,但不會寫只有映射顯着快於讀/寫映射,因爲操作系統不需要從磁盤讀取頁面,只需從內存中清除頁面磁盤?它也有完全非阻塞的好處(除了沖洗和破壞)。 我會從升壓切換到本機操作系統內存映射受益嗎?

    0熱度

    1回答

    此示例http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx傳遞TCHAR,但是如何讓它傳遞一個DWORD?我在下面嘗試,但我得到不能將參數1從'DWORD *'轉換爲'const wchar_t *'。 DWORD* pid=new DWORD[20]; HANDLE hMapFil

    4熱度

    2回答

    我一直在閱讀有關memory mapped files,它允許跨多個進程共享文件。 每個進程(32位是特異性的)具有專用地址空間4GB其通過Eric Lippert分爲2GB的用戶模式地址空間和2GB保留用於內核如上所述here。用戶模式地址空間對每個進程是私有的,不能被其他進程修改。 那麼,這是否意味着MMF被映射到內核模式地址空間,因爲它在所有進程之間共享? 我已經搜索了很多關於MMF的地方,

    4熱度

    1回答

    我的web服務每分鐘寫入數千次事務,我們將它們保存在hd上。 我測試了不同的方式來保存這些文件,我用標準的IO和MemoryMapped文件做了一些測試。在我的結果中,使用MemoryMapped文件編寫文件(20 k文本文件)的速度比標準IO快4倍,並且我無法找到任何缺點。 由於我對這項技術沒有太多的經驗,您是否認爲我可能會遇到任何問題,或者您沒有看到任何缺點? 謝謝! EDIT 1,這裏的源:

    2熱度

    1回答

    任何人能解釋我的內部工作下面的代碼 public class MemoryMappedFileInJava { private static int count = 10485760; //10 MB public static void main(String[] args) throws Exception { RandomAccessFile memoryMappedFi