很多人会把“共享内存(shm)”和 “mmap” 混在一起,因为它们底层都和内存映射有关,而且性能都非常高,共享内存:以“内存”为中心,mmap:以“文件”为中心。
一、共享内存(shm)
shmget()
shmat()
或者:
shm_open()
mmap()
一本质
内核直接创建,一块匿名物理内存,多个进程共同映射。
特点
1. 不依赖真实文件
虽然 POSIX shm 在 /dev/shm 下能看到:
/dev/shm/xxx
但它本质不是普通磁盘文件。
通常:
- 在 tmpfs
- 驻留内存
- 不落磁盘
2. IPC 专用
目标就是:进程间高速通信。
3. 生命周期独立
即使创建进程退出:
共享内存还可能存在:
ipcs -m
必须:ipcrm
或者:shm_unlink()
举例:
int shmid = shmget(key, 4096, IPC_CREAT | 0666);
char *p = shmat(shmid, NULL, 0);
strcpy(p, "hello");
另一个进程:
char *p = shmat(shmid, NULL, 0);
订阅专栏 解锁全文
1080

被折叠的 条评论
为什么被折叠?



