【发布时间】:2019-08-05 17:52:27
【问题描述】:
我在here之前已经问过这个问题了
但我仍然无法理解MapViewOfFile 的工作原理。我已经看过 msdn 示例,但仍然感到困惑。
我只需要有人向我解释如何将整个结构发送到我的共享部分并从那里阅读。
此外,MapViewOfFile 实际上如何与发送和读取变量一起工作。
但最重要的是,在将整个结构从进程 1 初始化到进程 2 之后,我如何发送它(您可以在上面链接的旧线程中看到我在说什么)。
【问题讨论】:
-
它没有被发送到任何地方。内存同时物理映射到多个进程的地址空间中。
-
@drescherjm 但是您将如何从其他进程访问它,我现在只知道我需要使用 memcpy 将 var 从进程 a 复制到进程 b 例如。但是您将如何从进程 b 访问它?以及如何从流程中发送它我需要一些代码示例来了解更多信息。
-
@Frankoo 两个进程都必须调用
MapViewOfFile()来映射来自CreateFileMapping()的相同内存映射对象。您必须给映射对象一个唯一的名称,以便两个进程可以共享同一个映射对象。然后两个进程将映射指针到内存中的相同物理数据。这在 Microsoft 的文档中得到了清楚的解释和演示。您对它的确切理解有什么困难? -
@Frankoo 进程 A 创建一个命名映射对象,映射它的视图以获取指向物理内存的指针,并根据需要用数据填充该内存。进程 B 按名称打开相同的映射对象,映射它自己的视图以获取指向物理内存的指针,并根据需要从该内存中读取数据。您不能将指针从 A 发送到 B,指针不能跨越进程边界。您必须将结构数据复制到 A 和 B 都可以使用自己的本地指针访问的内存中。
-
您需要停止将其视为将其“发送”到其他进程。你不发送任何东西。两个进程都获得了自己对同一块内存的看法。一个进程写入该内存,另一个进程从中读取。