将堆内存映射到共享内存(Windows)

时间:2012-04-09 08:09:55

标签: windows memory memory-mapped-files

假设我有一个函数,它将指向(处理)堆内存的指针作为输入。此功能与同一系统上的服务进程通信,并使用共享内存进行通信(我需要最大吞吐量,因此这是我可以使用的唯一可接受的IPC形式。)

有没有办法将已分配的堆内存用作共享内存(即将其映射到文件),而无需重新分配相同大小的共享内存缓冲区?因为我需要支持几百兆字节(可能是千兆字节)的内存缓冲区,并且必须分配两倍的内存。

此外,由于延迟,分配一个小的共享内存缓冲区并重复使用它是不可接受的(因为我需要多次同步两个进程之间的小缓冲区更新)。

我可以设计我的函数,使得它需要一个指向共享内存的指针,但这会给我的函数用户带来负担(因为他们必须自己管理他们的共享内存),并且灵活性也低得多如果管理不当,会产生很大的开销。

TL; DR:我需要一种方法来映射堆内存,使另一个进程可以直接写入其中而无需通过中间共享内存缓冲区。

有谁知道怎么做?感谢。

0 个答案:

没有答案