【问题标题】:Shared memory between threads and processes [closed]线程和进程之间的共享内存[关闭]
【发布时间】:2017-11-30 17:42:52
【问题描述】:

有人可以帮我解决这些问题吗:

  1. 同一进程内的线程共享的内存(代码/数据)部分是什么(不同进程不共享)?

  2. 两个进程可以共享它们的虚拟地址空间吗?

  3. 两个进程可以共享全局变量吗?

  4. 使用内存映射文件可以在进程之间实现什么样的数据共享?

  5. 是否可以使用内存映射文件共享链表?还有一组数字?

【问题讨论】:

  • 请一次一个问题。这看起来像家庭作业。你不能自己做吗?试着自己研究一下。

标签: multithreading winapi shared-memory memory-mapped-files virtual-address-space


【解决方案1】:
  1. 一个进程只有一个地址空间。单个进程中的所有线程都可以访问该进程的所有内存。

  2. 没有。在 Windows 上,要跨进程边界共享内存,您必须使用共享数据段或内存映射文件对象。

  3. 仅当变量存储在共享内存中时。

  4. 可以使用内存映射文件共享任何 POD 数据。将其视为原始连续字节块。您可以共享通常适合字节数组的任何内容。

  5. 无法共享链表,因为它的节点在内存中包含指向彼此的指针,并且指针不能跨进程边界使用。您必须将列表序列化为使用偏移量而不是指针的平面格式。可以共享 POD 类型的数组,比如整数,是的。

【讨论】:

  • 感谢您的回复,但我对以下几点仍有一些疑问: 2.共享数据段是什么意思?根据我在网上搜索后的理解,在进程之间共享数据的唯一方法是通过文件映射。 5. 我认为共享数据之间可以有指针,但它们应该是 _based 类型的
  • @Emy 请参阅How do I share data in my DLL with an application or with other DLLs?,尽管这两种方法都是特定于编译器的(AFAIK 仅在 Visual C++ 中可用),而内存映射文件可以在任何语言和编译器中使用,并且可以访问 Win32 API .
猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 2012-07-06
  • 1970-01-01
  • 2021-03-26
  • 2023-03-31
  • 2012-07-03
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多