【发布时间】:2018-10-08 19:37:11
【问题描述】:
如何拥有一个独立的内存部分,它根本不支持任何文件或额外的管理层(如管道),并且可以在同一台 Windows 机器上的两个专用进程之间共享?
大部分文章将我指向 CreateFileMapping 的方向。让我们从那里开始:
使用 hFile=INVALID_HANDLE_VALUE 的 CreateFileMapping 实际上如何工作? 根据
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx
它 "...创建一个指定大小的文件映射对象,该对象由系统分页文件支持,而不是由文件系统中的文件支持..."
假设我在 CreateFileMapping 映射的内存中写入了一些内容,其中 hFile=INVALID_HANDLE_VALUE。在什么条件下这个内容会被写入磁盘上的页面文件?
此外,我对使用共享内存的动机的理解是保持性能和优化。为什么是“创建命名共享内存”一文 (https://msdn.microsoft.com/de-de/library/windows/desktop/aa366551(v=vs.85).aspx) 指 CreateFileMapping,如果没有单一的属性组合,这将阻止写入文件,例如页面文件?
回到最初的问题:恐怕 CreateFileMapping 还不够好......那么什么会起作用?
【问题讨论】:
-
您是否知道您的进程使用的所有内存要么是直接文件映射,要么由分页文件支持?使用
malloc得到的东西,甚至堆栈本身都属于第二类。 -
相信操作系统,它只会在必要时将数据交换到磁盘。
标签: c windows shared-memory