相同程序不同进程下实现数据共享
来源:互联网 发布:ipad编程程序 编辑:程序博客网 时间:2024/06/06 05:37
格式:
#pragma comment(linker,"/section:MyData,rws")#pragma data_seg("MyData") int g_iProNum = -1;#pragma data_seg()
说明:
- 以全局变量来定义,即函体之外;
- 必需初始化,否则编译器会把未初始化的变量放到.BSS段中;
- /SECTION:自己的数据段名,RWS,R为允许读,W为允许写,S为允许共享
第1步: 新建控制台程序,代码如下:
#include "stdafx.h"#include <iostream>#pragma comment(linker,"/section:DataShare,rws")#pragma data_seg("DataShare")int g_ValueA = 0; // 全局变量,要赋值#pragma data_seg()int _tmain(int argc, _TCHAR* argv[]){ if (!g_ValueA) { printf("%d:%d\n",&g_ValueA,g_ValueA); g_ValueA=1; } printf("%d:%d\n",&g_ValueA,g_ValueA); system("pause"); return 0;}
第2步: 运行Debug中的exe,可以看到先后运行的两个exe数据的变化
注意: 进程间共享的是相同的物理地址,不同进程对应相同物理地址的虚拟地址并不相同,进程间不能共享指针,因为指针指向的是虚拟地址对应的数据,在另一进程中该虚拟地址并不指向原来的物理地址,例如
#include "stdafx.h"#include <iostream>#pragma comment(linker,"/section:DataShare,rws")#pragma data_seg("DataShare")int *g_ValueA = NULL; // 全局变量,要赋值#pragma data_seg()int _tmain(int argc, _TCHAR* argv[]){ int a = 10; if (NULL == g_ValueA) { g_ValueA = &a; printf("%d:%d\n",g_ValueA,*g_ValueA); (*g_ValueA)++; } else { printf("%d:%d\n",g_ValueA,*g_ValueA); } system("pause"); return 0;}
该程序运行结果如下
这是由于第一进程中虚拟地址对应的物理空间a变为11,而第二进程收到的该虚拟地址对应的该进程的a还是等于10
阅读全文
0 0
- 相同程序不同进程下实现数据共享
- 不同进程通过共享内存实现数据共享
- 同一程序不同实例进程之间共享数据
- SharedPreference 实现不同进程间的数据共享
- 用Application() 实现同一个程序下数据共享
- Java不同线程之间实现数据共享
- DLL共享数据段,实现多进程数据共享总结
- DLL共享数据段,实现多进程数据共享总结
- Laravel实现多个视图共享相同的数据
- 不同进程间的HOOK,用到共享数据段
- 多进程 不同地址空间的数据共享问题
- WM_COPYDATA实现进程间数据共享
- WM_COPYDATA实现进程间数据共享
- WM_COPYDATA实现进程间数据共享
- WM_COPYDATA实现进程间数据共享
- Python的进程实现数据共享
- DLL在多个相同或不同的exe之间共享静态数据
- Windows CE下使用共享内存实现进程间数据交换
- 正则 MULTLINE 属性
- [XJB出题] [分块] 篮球架
- 2017 计蒜之道初赛第5场 UCloud 的安全秘钥(中等)【思维】
- 23种设计模式
- webpack js压缩插件
- 相同程序不同进程下实现数据共享
- Java基础之类加载机制及反射
- 关于gradle的那些闲碎琐事
- 字符串常量
- Spring学习(2)
- 爬虫
- JAVA 标识符
- Android 网络连接
- 不同进程通过共享内存实现数据共享