关于动态链接库及使用动态链接的优点

 

大约动态链接库

  动态链接容许模块培养或完成导出的DLL有或起作用。。动态链接在差异本人熟识的动态链接,应用动态链接时,链接挨次将库有或起作用编码复制品到每个所需的模块。。

动态链接典型

  在DLL中召唤有或起作用有两种方式。:

  • 培养时的动态链接load-time dynamic linking),该模块显式召唤导出有或起作用。,使它们像本地居民有或起作用。。这需求链接来导入DLL是那些的有或起作用的库。,导入库提出DLL WH的人和DLL有或起作用职位。。欲听说更多人,请参阅动态链接培养时。。
  • 运转时动态链接run-time dynamic linking),运转时可以经过LoadLibrary或LoadLibraryEx有或起作用装填DLL。培养后的动态链接库,该模块可以经过召唤GetProcAd获取DLL有或起作用的偿清地址,过后就可以经过复回的有或起作用方针召唤DLL有或起作用了。合乎逻辑的推论是,您可以戒导入库文章。。更多人,请参照“应用运转时动态链接库”。

动态链接库与内存指导

  在将每个挨次培养到DLL后来,将其测图回编造ADDR。,过后您可以召唤DLL的导出有或起作用。。

  零碎为每个DLL保持螺纹级援用计数。,一旦螺纹培养DLL,援用计数将放针1。而挨次逗留或许援用计数变为0(仅指运转时动态链接库),DLL将尽职被占用挨次的编造地址填空处。。

  就像对立面效能公正地。,DLL导出有或起作用在螺纹的左右文件完成(或召唤)。,合乎逻辑的推论是,以下异样致力于。:

  • 召唤DLL的螺纹可以应用经过DLL翻开的句柄。,证实是,挨次中翻开的什么都可以螺纹的句柄也可以由DLL f应用。。
  • DLL应用召唤螺纹的堆栈填空处和编造地址填空处。。
  • DLL从召唤挨次的编造地址填空处分派内存。。

动态链接的优点

与动态链接比拟,动态链接具有以下优点:

  • 多个挨次将两者都的DLL培养到两者都的庶生的址中。,在自然规律的内存中共享它结果却的复本。。这节省了零碎内存并缩减了切换。。
  • DLL有或起作用交换时,由于它找反对的一点钟有或起作用限制因素的交换,更改呼叫图案或更改复回值。,召唤它们的应用挨次不需求重行汇编或重行链接。。与之相反,动态链接靶子编码盘问应用挨次重行链接。。
  • DLL可以提出(手边的)售后服务。。拿 … 来说,修正显示驱动器的DLL以支援不支援W的显示。
  • 用差异的课程说汇编的挨次可以召唤两者都的DLL f。。召唤商定,拿 … 来说C、Pascal或规范召唤把持进入堆栈的限制因素挨次。,而找反对的应用有或起作用或召唤有或起作用来痛打堆栈。,寂静注册中间的限制因素?。更多人,请适用于汇编器的相关性文档。。

  应用DLL的一点钟潜在缺陷是应用挨次找反对的S。,它需求依赖另一点钟DLL模块。。设想在培养时应用动态链接,挨次启动时未找到DLL。,零碎将逗留挨次并预约反对的的人。。应用运转时动态链接,零碎不会的逗留。,而是短少的DLL中间的导出有或起作用都不的有空的。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注