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

时间:2012-02-17 04:16:52

标签: boost memory-management pool

我想在分叉进程之前在程序中预先分配足够大量的内存,然后在分叉进程中进一步分配/使用此池中的内存。我遇到过一些内存分配器,比如Bget,Boost等,但却无法理解如何使用它们。

那里有一个最简单的,我可以使用

poolhandle = poolallocate(pool_size)

然后在分叉过程中使用类似

的东西

ptr = allocatefromPool(poolhandle,no_of_bytes)

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

你能指出我正确的方向吗?如果Boost是你要走的路,你可以给我一个如何使用它的例子吗?

1 个答案:

答案 0 :(得分:1)

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

除此之外,总是存在actor的概念,你根本不共享任何内存,只需在actor之间发送消息,每个actor都是他们自己的数据存储区的策展人。这对编程来说更简单,特别是使用像ZeroMQ这样的工具,可以使进程间和线程间的消息传递变得如此简单。

如果你结合这两个想法,那么每个actor进程都有一个他们拥有的内存映射文件区域,你来回传递消息告诉他们要读或写什么。

有关内存映射文件的更多信息,请参阅此问题作为共享内存Posix shared memory vs mapped files

以下是关于IPC的问题,您需要多个流程来协调行动IPC vs domain sock vs named pipes

如果要在消息中移动大块数据,那么您可能希望将数据保留在内存映射文件中并实现某种形式的无锁共享。 Google可以使用关键字lock-free和“共享内存”或“数据结构”来解决很多问题。