免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3148 | 回复: 9

关于静态调用和动态调用的问题,求解? [复制链接]

论坛徽章:
0
发表于 2011-12-02 15:15 |显示全部楼层
都说静态调用比动态调用快,但是具体快在那里?说静态调用在编译的时候会记录被调用模块的地址,动态动用是在调用的时候才解析地址的。 这个地址指的是什么?
请求高手能用通俗移动的方法来即使一下这两者之间的差别。

论坛徽章:
0
发表于 2011-12-02 15:15 |显示全部楼层
自己先顶一下。

论坛徽章:
0
发表于 2011-12-02 17:02 |显示全部楼层
本帖最后由 first_come 于 2011-12-02 17:05 编辑

简单的说下:

静态调用:路径已经和你的程序绑定在一起了,当你调用的时候就不需要在去系统中寻找你要调用的那个object。 直接根据路径就可以马上找到你需要的object了,节省了查找的时间。

动态调用:每次程序调用那个object的时候还需要去系统中找(比如去lib list中查找)。


BTW: 其实这种问题,前辈们有讨论过的,建议查找下以前的帖子。

论坛徽章:
0
发表于 2011-12-02 17:24 |显示全部楼层
回复 3# first_come

你的意思是说这个是快在了  不用直接去LIB LIST去找OBJ直接就知道上那里去找?如果LIB LIST就一个LIB呢?

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
发表于 2011-12-02 19:15 |显示全部楼层
回复 4# xjromance


可能还是有一点区别,可能还是要快一点点。
因为静态的话,在程序中就把OBJ的物理地址解析了。
动态的话是根据OBJ 的NAME 去寻找还需要解析成物理地址吧。
我不知道这样理解对不对。如果找到OBJ的时候直接就是物理地址,那么就没区别了。

论坛徽章:
0
发表于 2011-12-02 22:04 |显示全部楼层
回复 5# junlee1986

1 假设:PGMA调用PGMB
动态调用:PGMA不知道PGMB在系统中的哪个位置,PGMA在调用PGMB的时候(run-time),按照当前的library list依次来寻找PGMB,这就是动态调用。

2 假设:PGM1 中的PROCA 调用PROCB
静态调用:PGM1 在编译的时候,编译器就把PROCB的地址信息保存在PGM1中了(具体binding的方式有by copy 和by reference两种)。当PROCA调用PROCB的时候,PROCA根据PROCB的地址,能够直接找到PROCB的位置,而不用像动态调用那样,要按照library list挨个library来搜索。这种方式就是静态调用。

还可参考:
http://bbs.chinaunix.net/thread-3558471-1-1.html

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
发表于 2011-12-03 20:54 |显示全部楼层
回复 6# niuhua77


    啊哈哈,了解拉,谢谢拉!

论坛徽章:
0
发表于 2011-12-03 21:46 |显示全部楼层
回复 7# junlee1986


    这个是误恢复。。。我想回复的是这个帖子,没想回复你,点错了,哈哈

论坛徽章:
0
发表于 2011-12-04 10:00 |显示全部楼层
了解。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
发表于 2011-12-04 15:00 |显示全部楼层
回复 8# niuhua77


    俺早看出来啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP