2

因此,我正在尝试在 C 程序中创建一个共享内存段,例如,我可以在其中写入一个简单的字符,然后从另一个 C 程序中读取该字符。

我一直在尝试使用calloc()malloc()但我相信这仅适用于该程序自己的heap.

是否有另一个功能可以做同样的事情,但在RAM内存中?也许通过十六进制值?还是我错了,这些函数实际上保留了所有进程可见的内存?

提前致谢。

编辑:-我使用的是 Windows 8。-语言不限于 C,可以是任何其他语言。

4

2 回答 2

2

当您需要在隔离的进程之间传输数据时,您可以选择许多进程间通信。共享一块内存通常使用文件映射对象来实现。

设置文件映射对象需要以下 API 调用序列:

  1. CreateFileMapping:这将创建文件映射对象。您可以传递一个唯一的名称(例如 GUID 的字符串表示),以便从其他进程轻松访问此对象。
  2. MapViewOfFile:将文件映射的视图映射到调用进程的地址空间。此时,可以使用文件映射对象,只需写入内存视图即可。

使用来自另一个进程的现有文件映射对象需要以下调用:

  1. OpenFileMapping:打开现有文件映射对象的句柄。
  2. MapViewOfFile:将文件映射的视图映射到调用进程的地址空间。内存视图中对内存的修改会反映在该文件映射的所有视图中。

请注意,通过跨进程的文件映射共享内存需要这些进程之间的同步。这个话题超出了这个答案的范围。MSDN 提供了对同步的介绍。


MSDN 中也提供了示例代码:创建命名共享内存

于 2016-08-08T11:48:05.130 回答
0

没有标准的方法可以做到这一点。如果您在 Unix/Linux 上工作,我建议您查看我的共享内存 malloc实现,它在 Windows 机器上的 Cygwin 上工作,但实际上是为 Unix 设计的。

于 2013-06-14T17:43:07.543 回答