mmap和System V共享内存的主要区别在于:
- sysv shm是持久化的,除非被一个进程明确的删除,否则它始终存在于内存里,直到系统关机;
-
mmap映射的内存在不是持久化的,如果进程关闭,映射随即失效,除非事先已经映射到了一个文件上。
总结mmap和shm:
1. mmap是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行映射。 而对于shm而言,shm每个进程最终会映射到同一块物理内存。shm保存在物理内存,这样读写的速度要比磁盘要快,但是存储量不是特别大。
2. 相对于shm来说,mmap更加简单,调用更加方便,所以这也是大家都喜欢用的原因。
3. 另外mmap有一个好处是当机器重启,因为mmap把文件保存在磁盘上,这个文件还保存了操作系统同步的映像,所以mmap不会丢失,但是shmget就会丢失。
4. mmap 映射成功就可以关闭 文件 fd