一尘不染

Linux共享内存:shmget()vs mmap()?

linux

在此线程中,建议在Linux中使用OP
mmap()而不是shmget()获取共享内存。我访问了这个页面,这个页面来获得一些文件,但第二个方面给出了一个模糊的例子mmap()

几乎是新手,并且需要在两个进程之间共享一些信息(以文本形式),我应该使用该shmget()方法还是mmap()?又为什么呢


阅读 738

收藏
2020-06-03

共1个答案

一尘不染

两种方法都是可行的。mmap该方法比限制性更强shmget,但更易于使用。shmget是旧的System
V共享内存模型,并且支持范围最广。mmap/
shm_open是用于共享内存的新POSIX方法,并且更易于使用。如果您的操作系统允许使用POSIX共享内存,那么我建议您这样做。

一些提示:

  • 如果您通过创建你的孩子forkmmapMAP_ANONYMOUS | MAP_SHARED是迄今为止最简单的方式-只需一个电话。MAP_ANONYMOUSPOSIX未指定的Linux扩展。
  • 如果您独立启动进程,但可以为它们提供共享的内存名称,则shm_open(+ ftruncate)+ mmapwith MAP_SHARED是两个/三个调用。librt在某些操作系统上需要。
  • 如果您的操作系统具有,/dev/shm/shm_open相当于在中打开文件/dev/shm/
2020-06-03