将已分配的内存映射到共享内存中。

3
如果已经分配了一些内存(例如使用malloc),是否可以将该内存与另一个进程共享,例如通过将页面标记为共享?需要明确的是,这与最初将内存分配为共享内存不同,例如使用shmget和类似方法。显然可以使用memcpy来实现这一点,但是否有直接的方法呢?

如果这是可能的,那么为什么还需要shmget呢?就我目前的理解而言,共享内存不是存储在堆上的。因此我的想法是不行的。但是很遗憾,我不能将其转化成答案。 - tonysdg
1个回答

2
mmap() creates a new mapping in the virtual address space of the calling process.
The starting address for the new mapping is specified in addr.
The length argument specifies the length of the mapping.

我想象中的步骤如下:

  • 在捐赠者进程中打开一个文件以进行写入。
  • 使用mmap()映射您现有的malloc'd内存。
  • 在另一个进程中打开同一文件。
  • 享受共享内存。

然而,同一手册(http://linux.die.net/man/2/mmap)立即接着说:如果addr为NULL,则内核选择创建映射的地址;这是创建新映射最便携的方法。如果addr不为NULL,则内核将其视为有关放置映射的提示;在Linux上,映射将在附近的页面边界处创建。新映射的地址作为调用的结果返回。 - Jeremy
@Jeremy 你的情况可能会有所不同,CPU只能按页面共享内存。 - alamar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接