【共享内存】利用MFC写的进程间通信——内存共享

本文详细介绍了如何利用MFC在Windows环境下实现基于共享内存的进程间通信,包括创建、访问和管理共享内存的步骤,以及在P2P模式下如何处理指针和同步问题。通过示例代码展示了读写操作,并给出了避免非法内存访问的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程通信——共享内存


对共享内存的理解

共享内存,就是一块由内核管理的物理内存,但是在不同进程间是可以调用API来得到自己进程相应HANDLE,因此可以对其进行读写、修改、执行(视获取方式)。其实在这里作为grean hand的我一开始就没弄懂虚拟地址和物理地址,其实每一个进程用的地址都是虚拟地址,即使是核心对象HANDLE,都是OS给出的虚拟地址。这样说清楚,我们就可以清晰地理解共享内存到是怎么“存放”的。这对共享内存中放置指针,而指针到底指向哪里也可以解释通。

windows下将要用到的API

//用来创建共享内存API
①HANDLE CreateFileMapping(HANDLE hFile,
   LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
   DWORD fProtect,
   DWORD dwMaximumSizeHigh,
   DWORD dwMaximumSizeLow,
   LPCTSTR lpName
   );

hFile//CreateFileMapping本来是用作磁盘文件映射到内存的,这里没有实际的文件,我们只是需要一个内存的映射,所以这里设为0xFFFFFFFF

 lpFileMappingAttributes//安全属性,具体查MSDN,这里我们不做特别要求,就设为NULL

fProtect//文件的读取方式(保护),PAGE_XXXX

dwMaximumSizeHigh//映射区大小的高32位,因为用不到,这里设为0

dwMaximumLow//映射区大小的低32位,这里就视你需要用到的虚拟内存而定了

lpName//共享内存的名字,不同进程之间要调用这块内存就需要用这个唯一值来调用,所以,设一个能记而又有意义的名字吧


//获取共享内存的地址,转换为自己设定的结构(当然系统类型也行的)

②LPVOID MapViewOfFile(HANDLE hFileMappingObject,

DWORD dwDisiredAccess,

DWORD dwFileOffsetHigh,

DWORD dwFileOffsetLow,

DWORD dwNumberOfBytesToMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值