Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1800300
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-29 12:54:40

当今多数UNIX系统支持共享库。Arnold[1986]描述了一个在System V下的早期实现,而Gingell等[1987]描述了在SunOS下的一个不同的实现。共享库从可执行文件中删除了通用的库程序,取而代之的是维护一个 所有进程引用的内存里某处的库程序的单一拷贝。这减少了每个可执行程序文件的尺寸,但增加了运行时的开销,当程序第一次被执行或每个共享库函数被调用时。 共享库的另一个好处是库函数可以用新的版本代替,而不用重链接每个使用这个库的程序。(这假设参数的数量和类型没有改变。)


不同的系统为一个程序提供了不同的方法来表明它是否想使用共享库。cc和ld命令的选项是典型的。作为一个尺寸区别的例子,下面的可执行文件--经典的hello world程序--不使用共享库而被创建:


$ cc -static hello_world.c
$ ls -l a.out
-rwxrwxr-x 1 tommy tommy 644429 2012-02-27 21:49 a.out
$ size a.out
   text       data        bss        dec        hex    filename
 575523       2056       7048     584627      8ebb3    a.out


如果我们使用共享库来编译这个程序,这个可执行程序的代码和数据尺寸会大幅减少:


$ cc hello_world.c
$ ls -l a.out
-rwxrwxr-x 1 tommy tommy 7165 2012-02-27 21:51 a.out
$ size a.out
   text       data        bss        dec        hex    filename
   1132        256          8       1396        574    a.out

阅读(810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~