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

How can I create a shared memory region which can expand over time?

本文关键字:时间 扩展 共享 内存 区域 创建 何创建 一个      更新时间:2023-10-16

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

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

我看了看boost api,它们似乎要求我们指定共享内存区域的大小。在我的例子中,这不是恒定的,因为需要加载的数据量会随着时间的推移而增长。这个共享内存是否可调整大小?

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

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

你做这件事的时候一定要小心。如果你减小内存的大小,而其他进程访问内存超出了它的大小,你将得到SIGBUS信号。

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