dll和exe的共享节------多进程共享dll/exe全局变量
来源:互联网 发布:阿里云做socket服务器 编辑:程序博客网 时间:2024/05/01 06:02
我们都知道同一个应用程序的多个实例之间并不会影响各自的变量,虽然他们的地址空间都是被该应用程序的映像内的物理存储器所提交,他们的数据和代码都是指向了该应用程序的映像,但是他们还是不会影响各自的变量,因为采取了copy-on-write机制,当有一个实例去修改共享的那个数据区的时候,那么操作系统会另外分配一个内存块,该内存块就是存放这个实例修改的数据,所以并不会影响其他的应用程序实例。
那么可执行文件或dll的多个实例之间怎么去共享全局数据呢?现在进入我们的主题-----共享节
什么是共享节呢?
.exe和dll文件的映像都是由许多节组成的,比如:.text,.data,.bss它们都有自己的作用。存放为初始化的变量呀,存放未初始化的变量呀,存放代码呀等等。。这些东西我们都不用管,编译器会帮我们做好一切的。
我们也可以定义自己的共享节:
这里就定义了一个叫做:“Shared”的共享节,在该共享节中有一个初始化了的变量g_data,注意:不要以为放在这里面就以为一定在这个共享节中,如果你没有初始化这个变量的话,那么这个变量还是放在默认的未初始化的共享节中。这样还不能达到我们共享变量的目的。我们还必须告诉链接程序,这个节里面的变量是要共享的。
/SECTION:Shared,RWS。这是在你的工程--设置---链接中配的。我们还可以在你的程序中直接设置:
这样就OK了。
下面我们来测试一下:
mydll.cpp:
dllCallOne.cpp:
dllCallTwo.cpp:
这样就实现了我们的多进程共享dll全局变量的目的了。
大家细心一点还会发现我在dll文件中注释了一行:
//__declspec(allocate("Shared"))int g_data=3;
这句话的意思就是:我就是要把这个变量放入到Shared共享节中。虽然它没有在那个节中定义,也不管这个变量有没有初始化。大家可以测试一下,把在共享节中的那个g_data删除,把这句话取消注释,同样也可以达到目的
0 0
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll和exe的共享节------多进程共享dll/exe全局变量
- DLL和EXE怎样共享全局变量?
- DLL和EXE怎样共享全局变量?
- DLL和EXE怎样共享全局变量?
- 在Exe和Dll之间共享变量
- 关于DLL和EXE共享静态类对象
- 使用DLL在多个进程间共享全局变量
- 使用DLL在多个进程间共享全局变量
- dll共享全局变量
- DLL在多个相同或不同的exe之间共享静态数据
- DLL和EXE的区别
- DLL和EXE的配合
- DLL和EXE的区别
- DLL和EXE的区别
- DLL和EXE的区别
- 如何实现W5200E01-M3中的UPnP(通用即插即用) 端口转发(三)
- bzoj1014: [JSOI2008]火星人prefix
- 利用自定义View实现头像截取页面
- SQL SERVER数据库判断对象是否存在的方法汇总
- jquery 实现checkbox全选、取消全选功能
- dll和exe的共享节------多进程共享dll/exe全局变量
- scala设计模式
- linux C程序中获取shell脚本输出(如获取system命令输出)
- jdk命令积累
- 自适应网页设计是怎么做到的的相关知识点总结
- Android View的绘制过程
- mysql:innodb表创建失败解决方案及更改数据库目录方法
- Moq 单元测试的意义
- 使用Ambari快速部署Hadoop大数据环境