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