dll和exe的共享节------多进程共享dll/exe全局变量
来源:互联网 发布:一般淘宝代购是正品吗 编辑:程序博客网 时间:2024/06/05 17:45
dll和exe的共享节------多进程共享dll/exe全局变量
分类: windows编程 C++2013-08-25 22:45 379人阅读 评论(0) 收藏 举报
exe应用程序编译器共享节data_seg
我们都知道同一个应用程序的多个实例之间并不会影响各自的变量,虽然他们的地址空间都是被该应用程序的映像内的物理存储器所提交,他们的数据和代码都是指向了该应用程序的映像,但是他们还是不会影响各自的变量,因为采取了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的区别
- 富豪应多做慈善事业
- java谜题1:奇数性
- codeforces #199 C. Cupboard and Balloons 题解
- 08-remove @Override annotation错误
- Best Time to Buy and Sell Stock II -- LeetCode
- dll和exe的共享节------多进程共享dll/exe全局变量
- 火星坐标和正常坐标之间的转换
- 我们为什么而活
- Debian GUN/Linux Desktop grap语言配置 [大三四八九月实习]
- C++学习日记之对象作为数据成员
- 谈谈android反编译和防止反编译的方法
- SVN 文件已锁定解决方法
- JavaScript 全局函数
- 空指针异常,可自己找不到问题的所在,谁能帮下我?