除非自己能很好的解决互斥问题。写好锁机制。 原帖由 Alligator27 于 2008-7-11 22:15 发表 http://bbs.chinaunix.net/images/common/back.gif
以前贴过的一张图。
266120
恩,你的意思就是so的.text section是通过map到同一物理内存,所以是共享的
而so .data section每个app都有自己的一份copy,所以他们之间是不共享的,那么能否通过什么编译连接选项从而使data section也共享呢?
回复 #12 blworld 的帖子
没有编译连接选项. 除非全局变量是只读的。 原帖由 Alligator27 于 2008-7-11 22:15 发表 http://bbs.chinaunix.net/images/common/back.gif以前贴过的一张图。
266120
恩 还是图片好理解,一看就明白了!
:wink: 好图一张走过.... 原帖由 Alligator27 于 2008/7/11 22:15 发表 http://bbs.chinaunix.net/images/common/back.gif
以前贴过的一张图。
266120
好图,收藏。
#pragma data_seg("sharedata")
int i=0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:sharedata,RWS")
VC中这样就行了 原帖由 blworld 于 2008-7-11 14:24 发表 http://bbs.chinaunix.net/images/common/back.gif
这个也想过,我现在想有没有编译选项或者连接选线或者dlopen的参数,来简单的做到这一点?
so中使用shared memory可以达到你的要求 原帖由 aoegiss 于 2008-7-14 01:09 发表 http://bbs.chinaunix.net/images/common/back.gif
#pragma data_seg("sharedata")
int i=0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:sharedata,RWS")
VC中这样就行了
对的,我就是想找找Linux下GCC有没有类似的用法。 原帖由 net_robber 于 2008-7-14 09:32 发表 http://bbs.chinaunix.net/images/common/back.gif
so中使用shared memory可以达到你的要求
恩,这样固然可以。但是我想问问有没有类似16楼的做法,基于Linux+GCC的情况下。 .so里的全局变量不能在进程间共享。理由很简单:
1,每个进程的空间都是独立的
2,修改.so中全局变量的值并不会改写.so文件
按我的理解,2更精确地表达应该是修改.S0中的全局变量的值并不会修改.SO 中.BSS或.DATA中对应的值.
因为被可执行文件做了份PRIVATE COPY放到自己的BSS/DATA段中了.
但不知出于什么考虑,请教各位拉........