簡體   English   中英

共享命名內存(Windows)

[英]Shared-Named memory (Windows)

我最近開始了一個需要使用共享/命名內存的項目。 我有一個工作原型 - 但在我承諾當前的實現之前,我想更多地了解這個主題。

我檢查了MSDN文檔(以及其他各種來源),並掌握了一切如何工作的基本原則,但我無法在下面找到我的問題的答案。

1)如果創建共享內存空間但未提供有效的文件句柄,則會使用系統頁面文件進行存儲。 我的問題是 - 如果我創建自己的文件,並將視圖映射到該文件 - 性能是否與映射到系統頁面文件時的性能相當?

2)您可以使用CopyMemory(創建數據副本)或將MapViewOfFile的結果轉換為首先寫入的類型來訪問共享內存空間中的數據。 假設我們在那里寫了一個數據結構“MyStruct”。 是否可以保存以下內容?

auto pReferenceToSharedMemory = (MyStruct*)MapViewOfFile(....);

pReferenceToSharedMemory->SomeField = 12345;
pReferenceToSharedMemory->SomeField2 = ...;
...

假設上述操作是安全的 - 將數據更改應用於存儲在共享內存空間中的數據肯定比將數據復制出來更新,更改某些值並將其復制回來更有效率?

3)最后 - OpenFileMapping和MapViewOfFile操作有多貴? 我認為理想情況下你應該只執行一次OpenFileMapping(在操作開始時),執行一次MapViewOfFile,並使用它在整個操作中返回的引用,而不是每次要訪問數據時都執行MapViewOfFile?

最后: MapViewOfFile返回的引用和MapViewOfFile中存儲的數據是否可能不同步?

1)您自己的文件和系統頁面文件之間的選擇不是性能; 這是堅持不懈的。 下次程序運行時,對文件的更改仍將存在。

2)正確的解決方案是`new(MapViewOfFile(...))MyStruct,如果映射由頁面文件支持,因此仍為空。

3)昂貴的操作是讀寫,而不是元操作。

4)我不知道這意味着什么,所以我很確定答案是否定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM