团灭Windows进程通信(三)——共享内存就是方便面

本文介绍Windows环境下使用#pragma指令实现共享内存的方法,包括数据段的定义、初始化及链接器配置等关键步骤,并指出注意事项。

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

文章来源:http://blog.csdn.net/huanglong8/article/details/53770815

在Windows内核编程中,有提到过共享数据段的内容,如果朋友以为我是要说FileMap文件映射的话,那可就错了,因为我觉得既然要先说共享内存,就要先说最简单,使用最方便的一种方法。

在windows下编程,vs有提供给我们很多编译和链接指令,我同大家一样,知道但不熟知,这里大名鼎鼎的就是#pragma了,它是预处理器的一组语法,根绝不同的语法结构和参数可以帮助我们完成各项工作。最简单的共享内存,如下例:

#pragma data_seg("MyShare")
unsigned int flag = 0;
char mydata[32] = {0};
#pragma data_seg()

#pragma comment(linker, "/Section:MyShare,RWS")

语法说明:MyShare是你可以自定义的一种数据段名称,这个名称用来标识在data_seg关键字中间的内容存储的内存块名称。像flag和mydata这两个变量则会放到堆上,
它仅仅只是告诉编译器,以下的这些变量放在另外一个地方,那么要实现共享,还还需要告诉链接器,这片数据段是什么作用.
Section:MyShare,RWS指的是一种访问类型,RWS分别代表可读,可写,共享。在做一些API工具开发的时候,我们需要进行详细设置,以免哪个程序员破坏了数据导致程序异常。
data_seg以外的变量,是不被共享的,如果需要在data_seg意外进行设置共享数据,则需要用到以下语法

__declspec(allocate("MyShare")) char mydata[32] = {0};

allocate的作用主要是在参数MyShare内存段上,主动分配内存。这种做法也是为了可以跳开data_seg片的限制,在需要的代码段中进行设置。
此部分仅仅简单介绍了共享数据段的基础使用,有空时,可以再深入的了解下。

数据段共享注意

  • #pragma data_seg之间的变量必须是初始化的,否则将无法共享。
  • #pragma comment(linker 必不可少,它才是设置共享的开关。
  • 如果这片内存没有被加载到进程中时,则会被释放

由于这种机制简单且方便,所以大部分程序员会将这部分共享放入到dll中,方便管理,方便维护,下一章我直接会用案例来实现AB进程聊天的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值