如果在我的c ++代码中,我使用mmap()来共享一个全局变量,我从linux终端运行一个版本的程序,在同一台机器上,我打开另一个终端,并运行相同的程序,这两个程序会访问共享的相同内存吗?
答案 0 :(得分:2)
这取决于您使用mmap
的方式。如果两个程序都创建了同一文件(或共享内存节点或其他)的共享映射,那么。如果它们映射不同的文件,或者创建私有或匿名映射,则为no(尽管私有映射将使用copy-on-write,因此内存将被共享,直到任一进程写入它)。
答案 1 :(得分:1)
仅当
时,两个进程才会看到内存映射区域的相同内容MAP_SHARED
标志完成的。如果进行匿名文件映射,则没有后备文件,因此进程将不会看到彼此的内容。要实现共享内存,您可以在tmpfs
挂载中创建一个文件(通常/dev/shm
可用)。或者,在Linux上,给定最近足够的内核(Linux 3.17或更高版本),syscall memfd_create
可用于在一个进程中创建没有文件系统条目的tmpfs
文件,并与其他进程共享可以使用file descriptor passing授予他们访问该文件的权限。