Boost 预先分配内存并在分叉进程中使用。

Boost 预先分配内存并在分叉进程中使用。,boost,memory-management,pool,Boost,Memory Management,Pool,我希望在分叉进程之前在程序中预先分配足够大的内存,然后在分叉进程中进一步分配/使用该池中的内存。我遇到过一些内存分配器,如Bget、Boost等,但不知道如何使用它们 有没有一个最简单的,我可以像这样使用 poolhandle=poolallocate(池大小) 然后在分叉过程中使用 ptr=allocatefromPool(池句柄,无字节) 然后,如果我通过某个IPC将这个指针传递给另一个进程,那么即使在该进程中也应该可以访问它 你能给我指一下正确的方向吗?如果Boost是一种方法,你能给我一

我希望在分叉进程之前在程序中预先分配足够大的内存,然后在分叉进程中进一步分配/使用该池中的内存。我遇到过一些内存分配器,如Bget、Boost等,但不知道如何使用它们

有没有一个最简单的,我可以像这样使用

poolhandle=poolallocate(池大小)

然后在分叉过程中使用

ptr=allocatefromPool(池句柄,无字节)

然后,如果我通过某个IPC将这个指针传递给另一个进程,那么即使在该进程中也应该可以访问它


你能给我指一下正确的方向吗?如果Boost是一种方法,你能给我一个如何使用它的例子吗?

老实说,最简单的方法是使用内存映射文件。然后你只是寻找和写作来保存东西,或者寻找和阅读来获得东西

除此之外,始终存在参与者的概念,您根本不共享任何内存,只是在参与者之间发送消息,每个参与者都是自己数据存储的管理员。编程更简单,尤其是使用ZeroMQ等工具,使进程间和线程间消息传递变得非常简单

如果您将这两种想法结合起来,那么每个参与者进程都有一个内存映射文件区域,它们拥有该区域,并且您来回传递消息来告诉它们读或写什么

有关将内存映射文件作为共享内存的详细信息,请参阅此问题

这里有一个关于IPC的例子,您需要多个进程来协调操作


如果消息中有大量数据块要移动,那么您可能希望将数据保留在内存映射文件中,并实现某种形式的无锁共享。有很多东西你可以在谷歌上使用关键字lock free与“共享内存”或“数据结构”结合使用。

嗨,迈克尔,谢谢你提供这些输入。内存映射文件是我知道的一个选项,但我的任务要求使用现成的简单分配器或自己编写一个。基本上是某种堆/内存管理器。我想先探讨一下可用的选项,看看它是否符合要求。内存映射文件,即我听说的mmap可能会很慢,因为它涉及到几个系统调用?(很抱歉,我使用了它,但没有对此进行验证)是否有任何流行且简单的堆管理器/内存分配器/池可供我使用?boost实际上也没有预先分配内存,是吗?基本上,我希望预先分配一大块内存,然后从中分配我的结构、数组、int、chars…等数据结构。另外,当我将指向这些的指针传递给另一个(分叉的)进程时,该进程应该能够访问该内存。