团灭Windows进程通信(三)——共享内存就是方便面
2016-12-20 22:36
926 查看
文章来源:http://blog.csdn.net/huanglong8/article/details/53770815
在Windows内核编程中,有提到过共享数据段的内容,如果朋友以为我是要说FileMap文件映射的话,那可就错了,因为我觉得既然要先说共享内存,就要先说最简单,使用最方便的一种方法。
在windows下编程,vs有提供给我们很多编译和链接指令,我同大家一样,知道但不熟知,这里大名鼎鼎的就是#pragma了,它是预处理器的一组语法,根绝不同的语法结构和参数可以帮助我们完成各项工作。最简单的共享内存,如下例:
语法说明:MyShare是你可以自定义的一种数据段名称,这个名称用来标识在data_seg关键字中间的内容存储的内存块名称。像flag和mydata这两个变量则会放到堆上,
它仅仅只是告诉编译器,以下的这些变量放在另外一个地方,那么要实现共享,还还需要告诉链接器,这片数据段是什么作用.
Section:MyShare,RWS指的是一种访问类型,RWS分别代表可读,可写,共享。在做一些API工具开发的时候,我们需要进行详细设置,以免哪个程序员破坏了数据导致程序异常。
data_seg以外的变量,是不被共享的,如果需要在data_seg意外进行设置共享数据,则需要用到以下语法
allocate的作用主要是在参数MyShare内存段上,主动分配内存。这种做法也是为了可以跳开data_seg片的限制,在需要的代码段中进行设置。
此部分仅仅简单介绍了共享数据段的基础使用,有空时,可以再深入的了解下。
数据段共享注意:
#pragma data_seg之间的变量必须是初始化的,否则将无法共享。
#pragma comment(linker 必不可少,它才是设置共享的开关。
如果这片内存没有被加载到进程中时,则会被释放。
由于这种机制简单且方便,所以大部分程序员会将这部分共享放入到dll中,方便管理,方便维护,下一章我直接会用案例来实现AB进程聊天的需求。
在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进程聊天的需求。
相关文章推荐
- 团灭Windows进程通信(四)——共享库就是加料的方便面
- 学习笔记——进程通信IPC之共享内存
- windows笔记-使用内存映射文件在进程之间共享数据
- Windows共享内存
- 在驱动和应用程序间共享内存 分类: windows驱动程序WDM 2013-09-25 14:37 650人阅读 评论(0) 收藏
- Windows驱动中通过MDL实现用户态与核心态共享内存
- windows下利用文件映射实现共享内存
- windows 内存映射文件实现数据共享之原理
- Windows进程间通信之共享内存
- Windows进程间通信之共享内存
- windows 进程间通信(共享内存)
- Windows 进程间通信 共享内存(FileMapping)_C#实现
- windows 进程间通信(共享内存)
- windows下信号量和共享内存api, mark:共享内存实现进程间锁
- Windows 程序设计 第二十一章 DLL中共享内存数据
- windows笔记-使用内存映射文件在进程之间共享数据
- Windows进程间通信:共享内存
- Windows共享内存 C++及C#实现
- Linux c 基于内存的进程通信—共享内存、共享队列(消息队列)
- windows 共享内存