使用shmget(),我们可以分配一定大小的共享内存块(以字节为单位),并使用shmat()将该共享内存块附加到调用进程的地址空间。
我需要检查一下我的理解:
我们有一个进程使用shmget()和shmat()创建并附加共享内存,另一个进程使用shmat()将共享内存附加到其地址空间。
现在,这个共享内存的返回地址(使用shmat())在这两个进程中是不同的,因为这是一个虚拟地址。
但是,共享内存块本身有一个基本物理地址,映射到共享此内存的进程的不同虚拟地址。这是正确的吗?
发布于 2023-03-20 09:39:14
是的,这是正确的。共享内存的思想是,不同的进程可以映射相同的实际内存;由于虚拟寻址,这些地址不一定是相同的。
您甚至可以在不同的地址将相同的共享内存页映射到同一个进程两次--例如,GNU (古典的) 双映射缓冲区以模拟环形缓冲区,其中在末尾写入意味着在开头写入。。
https://unix.stackexchange.com/questions/740339
复制相似问题