Linux共享内存(mmap详解)_MJ813的专栏-CSDN博客_unix共享内存mmap()

概念

mmap函数是unix/linux下的系统调用。

mmap系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件的操作。而Posix或系统V的共享内存IPC则纯粹用于共享目的,当然mmap()实现共享内存也是其主要应用之一。

mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

对比

mmap与shm对比

1、mmap是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行映射。

而对于shm而言,shm每个进程最终会映射到同一块物理内存。shm保存在物理内存,这样读写的速度要比磁盘要快,但是存储量不是特别大。

2、相对于shm来说,mmap更加简单,调用更加方便,所以这也是大家都喜欢用的原因。

3、另外mmap有一个好处是当机器重启,因为mmap把文件保存在磁盘上,这个文件还保存了操作系统同步的映像,所以mmap不会丢失,但是shmget就会丢失。

第一种: shmget方式

适用场景:不同进程之间,创建的内存相对较小

第二种: mmap方式

适用场景:父子进程之间,创建的内存非常大时

使用

头文件