Linux shared memory: shmget() vs mmap()?

前端 未结 2 800
孤街浪徒
孤街浪徒 2020-12-07 09:06

In this thread the OP is suggested to use mmap() instead of shmget() to get shared memory in Linux. I visited this page and this page to get some d

2条回答
  •  伪装坚强ぢ
    2020-12-07 10:13

    Both methods are viable. mmap method is a little bit more restrictive then shmget, but easier to use. shmget is the old System V shared memory model and has the widest support. mmap/shm_open is the new POSIX way to do shared memory and is easier to use. If your OS permits the use of POSIX shared memory then I would suggest going with that.

    Some hints:

    • If you create your children via fork then mmap with MAP_ANONYMOUS | MAP_SHARED is by far the easiest way - just one call. MAP_ANONYMOUS is however a Linux extension not specified by POSIX.
    • If you start the processes independently, but can supply them with a shared memory name then shm_open (+ ftruncate) + mmap with MAP_SHARED is two/three calls. Requires librt on some OSes.
    • If your OS has /dev/shm/ then shm_open is equivalent to opening a file in /dev/shm/.

提交回复
热议问题