内存映射和共享内存
引言
內(nèi)存映射實(shí)現(xiàn)共享內(nèi)存。通過內(nèi)存映射實(shí)現(xiàn)共享內(nèi)存的方式又有好多種。
普通文件:現(xiàn)在文件系統(tǒng)打開一個存在的文件或者創(chuàng)建一個不存在的文件。
設(shè)備文件("/dev/zero")
匿名內(nèi)存映射:mmap的參數(shù)只要稍作修改就好,MAP_SHARED修改為MAP_SHARED|MAP_ANON,fd參數(shù)設(shè)為-1就好了。
訪問內(nèi)存映射對象
內(nèi)核允許文件大小和內(nèi)存映射大小不一致。但是不一致的地方,有些是沒有問題,有些會發(fā)出一些信號的。
Posix共享內(nèi)存區(qū)
Posix提供了兩種在無親緣關(guān)系的進(jìn)程之間通信。內(nèi)存映射文件(有親緣無親緣關(guān)系均可)和共享內(nèi)存區(qū)對象(使用Posix提供的一系列API)。
1、內(nèi)存映射文件
(1)用于父子進(jìn)程之間通信共享內(nèi)存區(qū)
(2)用于無親緣關(guān)系的進(jìn)程之間通信共享內(nèi)存區(qū)
2、共享內(nèi)存區(qū)對象
需要使用Posix提供的API,有兩個步驟要求:
a、指定一個名字參數(shù)調(diào)用shm_open,已創(chuàng)建一個新的共享內(nèi)存共享區(qū)對象或者打開一個已經(jīng)存在的內(nèi)存共享區(qū)對象。
b、調(diào)用mmap函數(shù)把這個共享內(nèi)存區(qū)映射到調(diào)用進(jìn)程的地址空間。
總結(jié)
共享內(nèi)存區(qū)中最好還是不要有指針。因?yàn)橥粋€共享內(nèi)存對象可能會映射到各個調(diào)用進(jìn)程的不同物理地址,因?yàn)橹羔樖侵赶虻膶?shí)際地址。
轉(zhuǎn)載于:https://www.cnblogs.com/sylz/p/6035558.html
總結(jié)
- 上一篇: “宪府频闻转殿监”下一句是什么
- 下一篇: [代码]--WinForm 窗体之间相互