程序的装入和链接

本文介绍了程序编译、链接和装入的过程,包括预处理、编译、优化、汇编、静态链接、动态链接(装入时和运行时)。讨论了三种装入方式:绝对装入、可重定位装入和动态运行时装入,分析了它们的优缺点及适用场景。

编译—链接---装入

 

编译:

预处理—编译、优化—汇编

 

链接:

静态链接—动态链接

1、 静态链接

2、 装入时动态链接

3、 运行时动态链接

 

装入:

静态装入—动态装入

1、 绝对装入方式

这种方式在编译的时候就会产生绝对地址(程序中的逻辑地址就是实际的物理地址),在装入的时候不需要对地址和数据进行修改。

缺点:只能将目标模块装入内存中指定的位置,不够灵活,只适合单道程序环境,而且当需要修改地址的时候,可能会改变程序中的所有的地址,还需要程序员对物理地址很熟悉。

 

2、 可重定位装入方式

适合于多道程序处理环境,目标模块中的代码的逻辑地址都是从0开始的相对地址,在装入内存中是会进行地址转换,转换成真正的可用的物理地址。在修改地址的时候需要对数据地址和指令地址都修改,从而获得绝对地址。把装入时对目标模块中的指令和数据进行修改的过程称为重定位,又因为地址变换通常是在装入时一次完成,以后不再改变,所以称为静态重定位。

优点:相对灵活,能够适应多道程序环境,可以将程序装入内存中的任意位置。

缺点:只能在装入时修改地址,在运行时如果要修改地址的化是无能为力的。

 

3、 动态运行时装入方式

动态运行时装入方式,在把装入模块装入内存后,并不立即把装入模块的相对地址转化成绝对地址,而是把这种转化延迟到程序执行真正需要用这个模块的时候,因此装入内存中的模块的地址还是相对地址,为了使地址转换不影响指令的执行速度,这种方式需要一种重定位寄存器的支持。

优点:更加灵活,在程序的运行期间可以修改模块的地址。

缺点:需要重定位寄存器的支持,转换复杂。


总的来说,这三种装入方式各有利弊,绝对装入方式的指令执行速度是最快的,但是也是最不灵活的,只能适于单道程序环境,而可重定位装入和动态运行时装入都是可以运行在多道程序环境中的,但是灵活性不同,复杂度也不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值