C++面试题16_共享内存(shm)和mmap 的区别?

很多人会把“共享内存(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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值