如何创建一个可以随时间扩展的共享内存区域?
How can I create a shared memory region which can expand over time?
我需要使用一个旧的c++项目,其中每个进程将相同的数据加载到内存中。这是只读的,每个进程都有完全相同的数据副本。最近,该服务已经开始冲击其运行的系统。
我正在评估我可以对此进行更改的方法,我认为boost interprocess
库非常适合我的用例。我考虑的另一件事是使用外部数据存储,但由于延迟,我不太倾向于使用它。
我看了看boost
api,它们似乎要求我们指定共享内存区域的大小。在我的例子中,这不是恒定的,因为需要加载的数据量会随着时间的推移而增长。这个共享内存是否可调整大小?
也可以随意提出问题的替代建议或您在类似情况下使用boost interprocess
的经验。
要调整共享内存的大小,可以使用shmctl,其中cmd=SHM_SIZE
.
你做这件事的时候一定要小心。如果你减小内存的大小,而其他进程访问内存超出了它的大小,你将得到SIGBUS信号。
另一个问题是如何通知其他进程共享内存被调整大小。我想你可以使用消息队列,或者其他IPC机制。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- 扩展中的日期时间对象方法C++问题
- 超级强大:实时音调转换,时间扩展器不工作
- 用.v2扩展名建筑物增强日期/时间jamfile
- 初始化带有静态存储时间的std::数组,带有参数Pack扩展和附加值