精华内容
下载资源
问答
  • 实现链接的方法有三种:静态链接装入时动态链接和运行时动态链接。 ①静态链接 图5.2.2示出了经编译后所得到的三个目标模块A、B、C,他们的长度分别为 L、M、N。在模块A中,有 一条语句CALL B,用于调用模块B。在...

    实现链接的方法有三种:静态链接、装入时动态链接和运行时动态链接。

    ①静态链接

    经编译后所得到的三个目标模块A、B、C,他们的长度分别为 L、M、N。在模块A中,有

    一条语句CALL B,用于调用模块B。在模块B中,有一条语句CALL C, 用于调用模块C。B和C都属于外部

    调用符号,在将这几个目标模块链接装配成一个装入模块时,需要解决以下两个问题:

    ●对相对地址进行修改

    通常由编译程序产生的所有目标模块,其起始地址都为0,每个模块中的地址都是相对于0的。在链接成

    一个装入程序后,模块B和C的起始地址不再是0,而是L和L+M,此时需修改B和C中的相对地址,即模块

    B中的所有相对地址加上L,模块C中的相对地址都加上L+M。

    ●变换外部调用符号

    即将每个模块中所用的外部调用符号,都变换为相对地址,如把B的起始地址变换为L;C的起始地址变

    换为L+M。这种先进行链接所形成的一个完整的装入模块,又称为可执行文件。

    通常都不要拆开它,要运行时可直接将它装入内存。这种事先进行链接,以后不再拆开的链接方式,称为

    静态链接方式。

    ②装入时动态链接(Load-Time Dynamic Linking)

    用户源程序经编译后所得到的目标模块,是在装入内存时,边装入边链接的.即在装入一个目标模块时,若

    发生一个外部模块调用,将引起装入程序去找出相应的外部目标模块,并将它装入内存,还要修改目标模

    块中的相对地址。装入时动态链接方式有以下优点:

    ●便与软件版本的修改和更新

     

    在采用装入时动态链接方式时,要修改或更新各个目标模块,是件非常容易的事,但对于经静态链接以

    装配在一起的装入模块,如果要修改或更新其中的某个目标模块时,则要求重新打开装入模块,这不仅

    是低效的,而且有时是不可能的。

    ●便于实现目标模块共享

    若采用装入时动态链接方式,OS能够将一个目标模块链接到几个应用模块,即实现多个应用程序对该模

    块的共享;然而,采用静态链接方式时每个应用模块都必须含有该目标模块的拷贝,否则无法实现共享。

    ③运行时动态链接(Run –Time Dynamic Linking)

    虽然前面所介绍的动态装入方式,可将一个装入模块装入到内存的任何地方,但装入模块的结构是静态

    的,它主要表现在两个方面:一是在进程的整个执行期间,装入模块不改变;再者是每次运行时的装

    入模块都是相同的。实际上,在许多情况下,每次要运行的模块可能是不相同的,但由于事先无法知道

    本次要运行哪些模块,故只能是将所有可能要运行到的模块,在装入时全部链接在一起,是每次执行时

    的装入模块是相同的。显然这是低效的。因为这样,在装入模块的运行过程中,往往会有某些目标模块

    根本就不运行。比较典型的例子是错误处理模块,如果程序在整个运行过程中,都不出现错误,便不会

    用到该模块。

    能有效的改变这种情况的链接方式,是最近几年流行起来的运行时动态链接方式。这种链接方式,可将

    某些目标模块的链接,推迟到执行时才进行。即在执行过程中,若发现一个被调用模块尚未装入内存时

    ,由OS去找到该模块,将它装入内存,并把它连接到调用者模块上。

    展开全文
  • 装入时动态链接是指:用户源程序编译后,得到一组目标模块,在装入内存,采用边装入,边链接的方式。即在装入一个目标模块,若发生一个外部模事件,将引起装入程序去找出相应的外部目标模块,并将他装入内存。 ...

    装入时动态链接是指:用户源程序编译后,得到一组目标模块,在装入内存时,采用边装入,边链接的方式。即在装入一个目标模块时,若发生一个外部模事件,将引起装入程序去找出相应的外部目标模块,并将他装入内存。

    优点主要分为两点:

    (1)便于修改和更新:对于静态链接,如果需要修改获更新某个目标模块,需要重新打开装入模块,这不仅仅是效率问题,而在很多时候甚至是不可能的。而采用动态链接方式,由于个目标模块是分开存放的,所以要修改或更新各目标模块是件非常容易地事情。

    (2)便于实现对目标模块的共享:在静态链接中,每个模块必含有目标模块的拷贝,无法实现共享,但采用装入时链接的方式,很容易将一个目标模块链接到几个应用模块上。

    展开全文
  • 运行时动态链接是在执行程序调用到模块内容再将动态库中的相应模块载入到内存。 这里有两个时间问题。一是载入时间,二是执行时间。 静态链接由于是在一开始就把所有模块都加载进入内存,所以如果模块很多的话...

    静态链接是在生成可执行程序的时候就把库中的内容加入到程序中。
    
    载入时动态链接是在将功能模块读入内存时把动态库中调用到的相关模块的内容载入内存。
    运行时动态链接是在执行程序调用到模块内容时再将动态库中的相应模块载入到内存。
    
    这里有两个时间问题。一是载入时间,二是执行时间。
    静态链接由于是在一开始就把所有模块都加载进入内存,所以如果模块很多的话效率就会被大大拉低。
    载入时动态链接是分别载入,当把一个模块载入内存时检查有调用关系的模块载入,比静态链接节省了许多开销。
    运行时动态链接则是把当前模块调用的模块推迟到调用的时候再载入。
    三者之间的关系就像是机枪,冲锋枪和手枪
    机枪在一开始就把所有子弹装好,开枪的时候很快,但也很笨重。
    冲锋枪则是将子弹分弹夹存好,轻便了许多,但是会有一段装填时间。
    手枪就更加轻便了,但是弹夹容量更小,装填的频率又变高了。

    展开全文
  • 优点:许多情况下,应用程序在运行时,每次要运行的模块可能是不相同的,但由于事先无法清楚的知道本次要运行哪些模块,所以只能将所有可能运行的模块全部装入内存,并在装入时连接在一起。但在运行时动态链接过程中...

    运行时动态链接:将对某些模块的链接推迟到程序执行时才进行。在执行过程中当发现一个被调用模块尚未装入内存时,立即由操作系统去寻找该模块,并将其装入内存,将其链接到调用者模块上。

    优点:许多情况下,应用程序在运行时,每次要运行的模块可能是不相同的,但由于事先无法清楚的知道本次要运行哪些模块,所以只能将所有可能运行的模块全部装入内存,并在装入时连接在一起。但在运行时动态链接过程中,在执行过程中都未用到的目标模块都不会被调入内存和链接,这样不仅能加快程序的装入过程,而且可以大大节省内存空间。

    展开全文
  • 载入时动态链接 系统启动一个使用载入时动态链接的程序,使用连接程序放置的到文件的信息来定位进程所需要的DLL的名称。然后系统将在以下位置顺序搜寻DLL:应用程序载入目录当前目录系统目录。通过...
  • 程序的链接和装入存在着多种方法,而如今最为流行的当属动态链接动态装入方法。本文首先回顾了链接和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链...
  • (实践推荐文章 :在linux下编写动态链接库的步骤: linux静态库共享库 - ...程序的链接和装入存在着多种方法,而如今最为流行的当属动态链接动态装入方法。本文首先回顾了链接和装入器的基本工
  • 程序的链接和装入存在着多种方法,而如今最为流行的当属动态链接动态装入方法。本文首先回顾了链接和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链接的实现。了解底层...
  • 级别: 初级 王勇 (yongwang@buaa.edu...本文首先回顾了链接和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链接的实现。了解底层关键技术的实现细节对系统分析设计人员无疑
  • 程序的装入和链接

    千次阅读 2016-08-07 16:55:09
    3、 运行时动态链接   装入: 静态装入动态装入 1、 绝对装入方式 这种方式在编译的时候就会产生绝对地址(程序中的逻辑地址就是实际的物理地址),在装入的时候不需要对地址数据进行修改。 缺点:只能...
  • 动态库的动态链接过程有两种:装入时动态链接和运行时动态链接 装入时动态链接也称为隐式动态链接,客户应用程序在编译链接成可执行程序需要导入头文件导入库(.lib),在程序启动装载加载整个动态链接库(....
  • 一个程序要想在内存中运行,除了编译之外还要经过链接和装入这两个步骤。从程序员的角度来看,引入这两个步骤带来的好处就是可以直接在程序中使用printferrno这种有意义的函数名变量名,而不用明确指明printf...
  • 程序装入和链接

    千次阅读 2018-06-15 09:56:15
    程序装入和链接创建进程首先要将程序数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:编译:由编译程序将用户源代码编译成若干个目标模块。链接:由链接程序将编译后形成的一组目标...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,327
精华内容 15,330
关键字:

装入时动态链接和运行时动态链接