如何创建可以随时间扩展的共享内存区域?

时间:2013-04-26 08:47:38

标签: c++ boost boost-interprocess

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

这样做时你必须小心。如果减小尺寸,并且其他进程访问超出其大小的内存,您将获得SIGBUS信号。

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