共享内存

共享内存定义:共享内存是最快的可用IPC(进程间通信)形式。它允许多个不相关的进程去访问同一部分逻辑内存。共享内存是由IPC为一个进程创建的一个特殊的·地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段“连接到”它们自己的地址空间里去。所有进程都可以访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会立刻被有访问同一段共享内存的其他进程看到。因此共享内存对于数据的传输是非常高效的。

共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?

$sysctl kern.ipc.shmmax  //可以查看共享内存的大小
kern.ipc.shmmax: 33554432

共享内存存在于进程数据段,最大限制为0x2000000Byte

一个linux进程的存储器映像

程序内总是从虚拟地址0x08048000处开始。用户栈总是从虚拟地址0xbfffffff处开始,共享对象总是加载在从虚拟地址0x40000000处开始的区域内。