4-2 程序的装入和链接

编译:由编译程序将用户源代码编译成若干个目标模块

链接:由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块

装入:由装入程序将装入模块装入内存

.c→.obj→.exe

编译、链接、装入

4.2.1程序的装入(简答)!!

  1. 绝对装入方式:当计算机系统很小,且仅能运行单道程序时,完全有可能知道程序将驻留在内存的什么位置,此时采用绝对装入方式。

绝对装入方式只能将目标模块装入到内存中事先指定的位置,这只适用于单道程序环境。

  1. 可重定位装入方式:在多道程序环境下,可采用可重定位装入方式,它可以根据内存的具体情况将装入模块装入到内存的适当位置。

注意:在采用可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存后的物理地址不同。

缺点:可重定位装入方式可将模块装入到内存中任何允许装入的位置,故可用于多道程序环境。但该方式并不允许程序运行时在内存中移动位置。因为程序在内存中的移动,意味着它的物理地址发生了变化,这时必须对程序和数据的地址进行修改后方可能运行。

3.动态运行时的装入方式:动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此装入内存后的所有地址都仍是逻辑地址。为使地址转换不影响指令的执行速度,这种方式需要一个重定位器的支持。

 

4.2.2  程序的链接!!!

1.静态链接方式:在程序运行前,将目标模块及所需的库函数链接成一个完整的装配模块,以后不再拆开。

将目标模块装配成装入模块时需解决的两个问题:

(1) 对相对地址进行修改

(2) 变换外部调用符号

2.装入时动态链接:用户源程序经编译后所得的目标模块,是在装入内存时,边装入边链接的,即在装入一个目标模块时,若发生一个外部模块调用事件,将引起装入程序去找出相应的外部目标模块,并将它装入内存,还要修改目标模块中的相对地址。

优点:

便于修改和更新

便于实现对目标模块的共享

运行时动态链接:运行时动态链接是将对某些模块的链接推迟到执行时才执行,即在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找到该模块并将之装入内存,把它链接到调用者模块上。凡执行过程中未被用到的目标模块,不会调入内存和链接,这样不仅加快程序的装入过程,而且节省大量的内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值