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

Dav*_*ron 11 c++ linux shared-memory

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

Gre*_*ape 7

简单回答:没有简单的方法.

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

但你不应该放弃!你可以有创意.您可以想出有一个标题段,您可以在其中存储有关实际有效负载段的信息.您可以使每个进程遵守某些规则,例如:重新挂接有效负载段,如其标头段中某处所述的id 与已知的 id 不匹配.

建议:我怀疑你知道这一点,但从不保留指向共享区域内数据的指针,只是偏移.

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