共享命名内存(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) 我甚至不知道这意味着什么,所以我相当确定答案是否定的。
- std矢量内存分配linux与windows编译器
- Windows Media Foundation MFCreateSourceReaderFromURL 函数中的内存泄
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- Windows API SIZE_T在内存和控制台中不显示相同的值
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- C/C++ Windows 或 Linux 将随机内存块映射成连续的顺序
- 在 Windows 中使用 C++ 可以分配的动态内存的最大大小是多少?
- cv:内存位置的异常 - 运行 openCV 代码 Visual Studio 2013 & Visual Studio 2017 - Windows 7
- Windows 10 是否保护您不访问其他程序正在使用的内存?
- 在特定 Windows DLL 模块中分配内存
- Windows 正在获取待机内存C++
- 通用 Windows 平台上的内存泄漏检测
- C Windows如何从内存打开文件
- Windows 32 位 mfc 应用程序的虚拟内存中的地址
- 如何将x64机器代码写入虚拟内存并在C++中为Windows执行
- C++:从程序、Windows和Linux中测量内存使用情况
- 使用nodejs在Windows中读取过程的内存值
- 如何在Windows和更高版本上保留内存,并将文件映射到内存中
- 代码ARP数组,指针和内存分配(Windows IP功能)的不可理解的部分
- 什么是 Windows 内存管理中的待机列表