编译时间,加载时间和执行时间之间的差异?

BOT*_*Jr. 8 operating-system

编译时间,加载时间执行时间有什么区别?

  • 有人能用非常简单的语言向我解释这三个术语吗?
  • 如果你能提供一些例子,那就更好了解一下.

干杯!

语境:

传统上,指令和数据与内存地址的绑定可以在整个过程中的任何步骤完成:

  • 编译时间.编译器将符号地址转换为绝对地址.如果您在编译时知道进程将驻留在内存中,则可以生成绝对代码(静态).

  • 加载时间.编译器将符号地址转换为相对(可重定位)地址.加载程序将这些转换为绝对地址.如果在编译时不知道进程将驻留在内存中,那么编译器必须生成可重定位代码(静态).

  • 执行时间.如果进程在执行期间可以从一个内存段移动到另一个内存段,则必须将绑定延迟到运行时.绝对地址由硬件生成.大多数通用操作系统使用此方法(动态).

Cod*_*nis 19

这些术语对我来说似乎是不言自明的,但这里是试图描述它们.包括进一步阅读的链接.

编译时间编译器处理代码的时间.在这种情况下,它正在讨论将您的代码转换为可执行二进制文件的编译器.

加载时间是指操作系统从长期存储(通常是硬盘驱动器)读取可执行文件并将其加载到可以执行它的短期内存(RAM)中.通常,硬盘驱动器太慢而无法为CPU供电,因此快速存储器用于存储CPU准备执行的指令/程序.这也是在保留初始内存分配并初始化以供程序使用时.

执行时间是程序正在执行或运行的时间.指令在内存中,由CPU处理.此时可以分配和/或解除分配附加存储器.

  • 您的答案清楚地解释了编译,加载和执行的概念.但也许这个问题是在**Binding**的背景下提出的.请编辑您的答案,如何以及何时将地址分配给每个案例中的流程? (5认同)

Var*_*gar 15

没有去太多到它怎么做,我会写什么就完成了.参考"绑定"一词,这就是我所知道的:

编译时间绑定: 它是编译时逻辑地址到物理地址的转换.现在这种类型的绑定只能在我们事先知道主存储器内容的系统中,并且知道我们必须从主存储器中开始分配的地址.在现代多编程系统中,不可能知道这两件事.因此可以安全地说,编译时绑定在不支持多编程的系统中是可能的.

加载时间绑定: 它是加载时逻辑地址到物理地址的转换.重定位加载程序在主内存中包含分配开始的基址.因此,当将进程加载到主存储器的时间到来时,重定位加载器将所有逻辑地址添加到基址以生成物理地址.

运行时绑定: 在大多数现代处理器中,支持多编程.因此,需要在运行时将物理地址从一个位置移动到另一个位置.这由运行时绑定概念来处理.它在Compaction中用于删除外部碎片.它也用于虚函数.

我希望这能解决你的疑问!