免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4137 | 回复: 8
打印 上一主题 下一主题

动态库加载问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-28 11:25 |只看该作者 |倒序浏览
本帖最后由 ly336117 于 2010-07-28 14:30 编辑

问个小白的问题
在UNIX下动态库的加载方式是什么?
代码加载在什么位置,有没有可能被不同的进程同时调用,会不会发生错误

-----------------------
结贴---看来多进程引用动态库是没有安全问题的,那么谢谢hellioncu 同志了

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-07-28 11:31 |只看该作者
不同进程调用,数据会被映射到不同的地址空间,不会有问题的

论坛徽章:
0
3 [报告]
发表于 2010-07-28 14:11 |只看该作者
那么,在动态库中的数组或者字符串的地址那?是放在每个进程的栈中,如果是这样应该不会有问题,但是如果只是放入其他可进入的那?
比如:在动态库中定义了全局数组
——file.c
int nNum[100];
int func{。。。}
我将他编译曾动态库file。so
那么,当有2个进程a,b同时操作nNum的时候是否会有错误发生,
还是我把进程与线程安全搞混了

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2010-07-28 14:17 |只看该作者
那么,在动态库中的数组或者字符串的地址那?是放在每个进程的栈中,如果是这样应该不会有问题,但是如果只 ...
ly336117 发表于 2010-07-28 14:11



    没事的,两个进程中分别都有nNum,不是同一个

论坛徽章:
0
5 [报告]
发表于 2010-07-28 14:27 |只看该作者
不会有问题的,操作系统下的动态链接库,可能被很多程序使用。。。加载不会出现问题

论坛徽章:
0
6 [报告]
发表于 2010-07-28 14:28 |只看该作者
那却确实是我搞错了,是我杯弓蛇影了,如果是线程的话需要控制,进程的话不需要

论坛徽章:
0
7 [报告]
发表于 2010-07-28 16:08 |只看该作者
本帖最后由 liwangli1983 于 2010-07-28 16:13 编辑

库中函数分配的不管是静态还是自动变量,实际还是分配到了调用此函数的进程各自的地址空间里了吧.

自动变量的话,进程运行到库函数的时候会在进程的地址空间中的用户栈上分配空间.

静态变量的话,链接器在链接的时候,就会分配在程序文件的.data区,在exec加载的时候就会在进程的地址空间给data区分配空间的时候分配了

论坛徽章:
0
8 [报告]
发表于 2010-07-29 08:33 |只看该作者
回头仔细查了下,动态库的全局变量或静态局部变量并不是链接时分配在程序文件的.data区,而是和.text区一起加载到线性地址空间被多个调用进程共享的.

问题是共享库的.text还好办,因为是只读的.而.data区呢?是不是如果在数据没变时就是大家共享,如果某个进程使得数据发生了改变,就重装分配一个物理页把数据复制过去并让该里程的页表项指向这个新页?

论坛徽章:
0
9 [报告]
发表于 2010-07-29 13:38 |只看该作者
有人知道吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP