线程和进程之间的共享内存

时间:2017-06-27 15:26:07

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:-1)

  1. 进程只有一个地址空间。单个进程中的所有线程都可以访问进程的所有内存。

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

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

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

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