Windows共享内存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35097289/article/details/78262721

1.共享内存介绍

共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。

共享内存是一种高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。

注:由于多个进程共享一段内存,因此需要进行同步。

2.相关函数介绍

2.1调用 CreateFileMapping 创建内存文件映射对象。

HANDLE CreateFileMapping(
  HANDLE hFile,              // handle to file to map
  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
                             // optional security attributes
  DWORD flProtect,           // protection for mapping object
  DWORD dwMaximumSizeHigh,   // high-order 32 bits of object size
  DWORD dwMaximumSizeLow,    // low-order 32 bits of object size
  LPCTSTR lpName             // name of file-mapping object
);

2.2将内存映射文件映射到进程的虚拟地址中

HANDLE CreateFileMapping(
  HANDLE hFile,              // handle to file to map
  LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
                             // optional security attributes
  DWORD flProtect,           // protection for mapping object
  DWORD dwMaximumSizeHigh,   // high-order 32 bits of object size
  DWORD dwMaximumSizeLow,    // low-order 32 bits of object size
  LPCTSTR lpName             // name of file-mapping object
);

下面举例说明如何将内存映射文件用于共享内存。
  第一次运行这个例子时,它创建了共享内存,并写入数据 。只要创建共享内存的进程没有关闭句柄hMap,以后运行的程序就会读出共享内存里面的数据,并打印出来。这就是使用共享内存在进程间通信的过程。程序代码如下。

运行效果:

猜你喜欢

转载自blog.csdn.net/qq_35097289/article/details/78262721