我有一个 C++ 应用程序,它通过 shmget(2) 在 Linux 系统上分配共享内存。我存储在共享内存中的数据会定期增长,我想以类似于 realloc() 增长常规内存的方式调整共享内存的大小。有没有办法做到这一点?我在 IBM 网站上找到了一个文档,其中提到了 SHM_SIZE 命令,但 Linux 和 BSD 联机帮助页中没有该命令,即使在特定于 Linux 的部分也是如此。
简单的回答:没有简单的方法。
原因非常合乎逻辑。共享内存被单独附加到每个进程的虚拟空间。每个进程都有自己的虚拟地址空间。每个进程都可以随时附加该段(不是字面意思,对齐设置了一些限制)任意地址。系统如何保证,比方说通过将区域扩展 4MiB,该段的每个“用户”都能够容纳 bigget 块在相同的起始地址之前较小的部分在哪里?
但你不应该放弃!你可以发挥创意。你可以想出拥有一个的想法header段,您在其中存储有关真实有效负载段的信息。您可以使每个进程遵守一些规则,例如:当其 id 时重新附加有效负载段,如中某处所述标头段, 不匹配已知的.
建议:我怀疑你知道这一点,但是从不在共享区域内保留指向数据的指针,仅保留偏移量.
我希望你能对我的胡言乱语有所利用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)