繁体   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