免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: blworld
打印 上一主题 下一主题

[C] so中的全局变量是否可以被所有进程共享? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-11 14:02 |显示全部楼层 |倒序浏览
20可用积分
我需要写一个so,这个so中有几个全局变量,我想让所有使用这个so的APP都共享。不知道有没有办法?
本来以为dlopen中的参数RTLD_GLOBAL可以,但是这个flag的作用是针对同个APP调用多个so时候。

论坛徽章:
0
2 [报告]
发表于 2008-07-11 14:24 |显示全部楼层
原帖由 maxxfire 于 2008-7-11 14:12 发表
不行吧,每个进程的地址空间都是独立的,要让多个进程共享数据的话,可以用共享内存实现啊。。


这个也想过,我现在想有没有编译选项或者连接选线或者dlopen的参数,来简单的做到这一点?

论坛徽章:
0
3 [报告]
发表于 2008-07-11 22:35 |显示全部楼层
原帖由 Alligator27 于 2008-7-11 22:15 发表
以前贴过的一张图。
266120


恩,你的意思就是so的.text section是通过map到同一物理内存,所以是共享的
而so .data section每个app都有自己的一份copy,所以他们之间是不共享的,那么能否通过什么编译连接选项从而使data section也共享呢?

论坛徽章:
0
4 [报告]
发表于 2008-07-14 13:31 |显示全部楼层
原帖由 aoegiss 于 2008-7-14 01:09 发表

        #pragma data_seg("sharedata")
                int        i=0;
        #pragma data_seg()

        #pragma comment(linker,"/SECTION:sharedata,RWS")



VC中这样就行了


对的,我就是想找找Linux下GCC有没有类似的用法。

论坛徽章:
0
5 [报告]
发表于 2008-07-14 13:32 |显示全部楼层
原帖由 net_robber 于 2008-7-14 09:32 发表



so中使用shared memory可以达到你的要求


恩,这样固然可以。但是我想问问有没有类似16楼的做法,基于Linux+GCC的情况下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP