gpt4 book ai didi

c++ - 我可以使用 shmctl 调整 Linux 共享内存的大小吗?

转载 作者:IT王子 更新时间:2023-10-29 00:01:10 26 4
gpt4 key购买 nike

我有一个 C++ 应用程序,它通过 shmget(2) 在 Linux 系统上分配共享内存。我存储在共享内存中的数据会定期增长,我想以类似于 realloc() 增长常规内存的方式调整共享内存的大小。有没有办法做到这一点?我在 IBM 的站点上找到了一个文档,其中提到了 SHM_SIZE 命令,但 Linux 和 BSD 联机帮助页没有它,即使在特定于 Linux 的部分中也是如此。

最佳答案

简单的答案:没有简单的方法。

原因很合乎逻辑。共享内存分别附加到每个进程的虚拟空间。每个进程都有自己的虚拟地址空间。每个进程都可以自由地将段附加到任何(不是字面意思,对齐设置了一些限制)任意地址。系统如何保证,比方说,通过将区域扩展 4MiB,该段的每个“用户”都能够将 bigget block 放在相同的起始地址,而较小的段以前是?

但您不应该放弃!您可以发挥创意。您可以想出拥有一个 header 段的想法,您可以在其中存储有关实际负载段的信息。您可以让每个进程都遵守一些规则,例如:当它的 id(如在header segment某处描述的)与已知的 不匹配时重新附加有效负载段。 p>

建议:我怀疑您知道这一点,但永远不要在共享区域内保留指向数据的指针,只保留偏移量

我希望你能利用我的胡言乱语。

关于c++ - 我可以使用 shmctl 调整 Linux 共享内存的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com