登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

满天星

鬓 毛 八 九 已 成 霜 , 此 际 逢 春 只 自 伤

 
 
 

日志

 
 

共享库  

2007-07-01 18:05:54|  分类: Program |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
共享库(Shared Libraries)今天,大部分的UNIX系统都支持共享库。Arnold在System V下描述了一个早期的实现,后来Gingell et al在SunOS下描述了一个不同的实现。共享库从可执行文件中移走了common library routines,取而代之的是在内存中保留了一份所有进程都会涉及到的库的拷贝(a single copy of the library routine )。这种做法的一个优势是减少了每个可执行文件的大小,但是却增加了一些运行时的开销(runtime overhead),不论是一个程序第一次被执行还是一个共享库函数第一次被调用。共享库的另一个优势是当库函数被更新版本的库函数更新时,不需要去重新再次连接编辑每个用到共享库的程序。(This assumes that the number and type of arguments haven't changed.)
对于一个程序,也许它想使用或者不想使用共享库,不同的系统提供了不同的方式去实现。命令cc和ld的选项就是个典型。以一个a.out的大小为例子,经典的hello.c程序,第一次不使用共享库来创建a.out:
$ cc -static hello1.c             用选项-static阻止gcc使用共享库
$ ls -l a.out
-rwxrwxr-x 1 sar         475570 Feb 18 23:17 a.out
$ size a.out
text     data     bss     dec     hex    filename
375657     3780    3220  382657   5d6c1    a.out
如果我们使用共享库来编译这个程序,可执行文件a.out的代码段和数据段的大小会有显著的降低:
$ cc hello1.c                    gcc默认是使用共享库的
$ ls -l a.out
-rwxrwxr-x 1 sar         11410 Feb 18 23:19 a.out
$ size a.out
text     data     bss   dec       hex    filename
872      256       4  1132       46c    a.out
-----------------------------
通过以上对比可以看到,共享库的确是能够显著地减少最后形成的可执行文件的大小。
需要补充的:
1.目标文件连接成一个可执行文件的过程,使用common library routines和使用共享库的。
2.命令size显示的单位是否是字节?
  评论这张
 
阅读(400)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018