3

我需要使用一个旧的 C++ 项目,其中每个进程将相同的数据加载到内存中。这是只读的,每个进程都有完全相同的数据副本。最近,该服务开始破坏它运行的系统。

我正在评估可以对此进行更改的方法,并且我认为boost interprocess库非常适合我的用例。我考虑的另一件事是使用外部数据存储,但由于延迟,我不太倾向于使用它。

我查看了boostapi,它们似乎要求我们指定共享内存区域的大小。就我而言,这不会是恒定的,因为需要加载的数据量会随着时间的推移而增长。这个共享内存可以调整大小吗?

也可以随意提出问题的替代建议或您boost interprocess在类似情况下的经历。

4

1 回答 1

1

要调整共享内存的大小,您可以使用shmctl,其中cmd=SHM_SIZE.

执行此操作时必须小心。如果您减小大小,并且其他进程访问超出其大小的内存,您将收到 SIGBUS 信号。

另一个问题是如何通知其他进程共享内存已调整大小。我想您可以使用消息队列或其他 IPC 机制。

于 2013-04-26T10:00:11.340 回答