• 动态链接库与静态链接库


    动态链接库

    概念

      动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效 率,具有很高的灵活性。采用动态库技术对于升级软件版本更加容易。与静态库(Static Link Library)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。

      在Linux下,动态链接库以.so的后缀存在!在Windows下,动态链接库以.dll的后缀存在!

    优点

      动态链接库不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐。适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

    a. 共享:多个应用程序可以使用同一个动态库,启动多个应用程序的时候,只需要将动态库加载到内存一次即可;
    b. 开发模块好:要求设计者对功能划分的比较好。

    缺点

      使用动态链接库的程序必须将动态链接库部署到相应的环境中,若动态库不存在,程序必然会报错!其次,程序的加载速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

      不能解决引用计数等问题。


    静态链接库

    概念

      在Linux下,静态库以.a的后缀名存在,在Windows下,静态库以.lib的后缀名存在!

      库中的代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。

    优点

      代码装载速度快,执行速度略比动态链接库快;只需保证在开发者的计算机中有正确的 .LIB/.a 文件,再以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

    缺点

      使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;但是如果多个应用程序使用的话,会被装载多次,浪费内存。


    两者的不同

    二者的不同点在于代码被载入的时刻不同。

    静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
    动态共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

  • 相关阅读:
    14GDB代码反向执行
    AcWing 1144. 连接格点
    AcWing 1143. 联络员
    AcWing 1141 局域网
    AcWing 1148 秘密的牛奶运输
    AcWing 904 虫洞
    AcWing 1146. 新的开始  
    AcWing 1140. 最短网络
    AcWing 346 走廊泼水节
    AcWing 1145. 北极通讯网络
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4261804.html
Copyright © 2020-2023  润新知