静态链接和动态链接

【静态链接和动态链接】
文章目录

      • 链接
        • 静态链接
        • 动态链接
        • 静态链接库、动态链接库的特点

链接
每个源程序模块独立地编译,然后按照要求将它们组装起来,这个模块组装的过程就是链接。连接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接分为静态链接和动态链接。
静态链接 对函数库的链接是放在编译时期完成的叫做静态链接。所有相关的目标文件与牵涉的函数库被链接合成一个可执行文件。在程序运行时刻,与函数库就再无瓜葛,因为所有需要的函数已经复制到相关位置。这些函数库被称为静态库。
动态链接 动态链接就是将一些函数库的链接推迟到程序运行时期。
静态链接库、动态链接库的特点
  • 动态链接库有利于进程间资源共享:当程序运行期间需要调用动态链接库,操作系统会首先查看正在运行的所有程序,在内存中查看是否已有此库函数的拷贝,若有,让其共享那一个拷贝,若没有,才载入。此做法虽然会带来动态链接的额外开销,但是却大大节省了系统的内存开销。静态链接则不同,当有多个程序需要调用某一静态链接库函数时,每个程序都要将这个库函数拷贝到自己的代码段中,这种做法将耗费更多的内存资源。
  • 动态链接库有利于程序升级:使用静态链接库,当库中的函数发生改变,使用库函数的程序需要重新编译;但如果使用动态链接库,只要动态链接库的函数接口不变,只用重新生成动态库替换之前的就可以。
  • 程序执行速度不同:使用静态链接库,在编译时,就将库函数装载到程序中去,而动态链接是在运行时才执行装载,所以在程序运行时,使用静态链接速度更快。

    推荐阅读