【问题标题】:Shared memory in shared library共享库中的共享内存
【发布时间】:2018-12-31 11:06:48
【问题描述】:

我必须在 c 中为共享内存中的内存分配器创建一个库。根据我的尝试,我必须在每个使用我的库并将指针传递给我的 malloc 函数的程序的开头打开并映射共享内存。是否可以在图书馆内只打开一次?这是我在整个作业中唯一不明白的地方

【问题讨论】:

  • 在当今的操作系统中,每个进程都有自己的地址空间,因此您必须在每个进程(而不是程序或库)开始时映射共享内存。跨度>
  • 因此,每个进程都必须调用 shm_open、ftruncate 和 mmap,最后调用 shm_unlink 或者我是否应该仅在共享内存的大小大于 0 时才调用 ftruncate。我将不得不通过指向我的 malloc 函数的指针
  • 您的 init 函数可以将句柄保存在静态变量中,因此您不必将其传递给您的 malloc
  • 你已经有一些代码了吗?为什么不显示呢?

标签: c linux shared-memory


【解决方案1】:

这取决于应用程序。如果每个使用库的程序都需要自己的共享内存,那么每个程序都必须调用库的一些 init 函数来分配新的共享内存。如果只需要一次共享内存,并且库可以稍后为每个程序使用它,那么检查它是否已分配,如果未分配就足够了。

【讨论】:

  • 如果你说一个进程中的 Linux .so 可以代表另一个不同的进程打开一个共享内存段 - 这是完全错误的 :( 如果你是说每个想要的程序共享内存需要为自己打开内存段 - 但无论是从“main()”程序还是从 .so 调用“shm*”都没有关系,然后请重新措辞您的回复以使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
相关资源
最近更新 更多