2016-03-01 161 views
4

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

  • 有人可以用非常简单的语言解释我这三个词吗?
  • 如果你可以提供一些例子,这将是更好的理解。

干杯!

上下文:

传统上,所述的指令和数据的存储器地址的结合可以在沿途的任何步骤来完成:

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

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

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

+0

您能否提供更多的上下文?你从哪里听说过这些条款?没有额外的上下文,我的答案会有点模糊/一般,找到例子会很困难。 –

+0

@DanielJour好吗? –

回答

7

这些术语对我来说似乎是自我解释,但这里有一个尝试描述它们。包括进一步阅读的链接。

编译时间是您的代码正在被compiler处理时。在这种情况下,它正在讨论一个将您的代码转换为可执行二进制代码的编译器。

Load time是当操作系统正在读取从长期存储的可执行(通常是硬盘驱动器)和装载成从其中可以执行该短期存储器(RAM)。一般情况下,硬盘驱动器的速度太慢,无法送入CPU,因此快速内存用于存储CPU准备执行的指令/程序。这也是当初始内存分配被保留并初始化以供程序使用时。

Execution时间是程序正在执行或运行时。指令在内存中并由CPU处理。额外的内存可能在此时被分配和/或解除分配。

+2

你的回答清楚地解释了编译,加载和执行的概念。但也许这个问题是在** Binding **的背景下提出的。请编辑您的答案,如何将地址分配给每个案例中的流程? – Siraj

-1

- 必须将源代码编译为机器代码才能成为可执行程序。这个编译过程被称为编译时间。编译好的程序可以打开并由用户运行。当应用程序正在运行时,它被称为运行时。

结合位装置的程序指令数据的关联的物理存储器位置。

-compile时间装订机构的指令数据到物理存储器的关联,它是由编译器完成。

-similarly负载时间绑定由装载机完成和运行时间绑定由CPU完成的。

2

没有去太多到它怎么做,我会写什么完成。参照“绑定”字,这是我知道的:

编译时绑定: 这是物理地址的逻辑地址在编译时的翻译。现在,这种类型的结合,才可能在我们所知道的主存储器的内容事先并了解在主存储器地址,我们必须开始从分配制度。在现代多编程系统中,了解这两件事情是不可能的。因此,可以安全地说,在不支持多编程的系统中,编译时绑定是可能的。

负载时绑定: 这是物理地址的逻辑地址在当时装载的 翻译。重定位加载程序包含分配将从其开始的主内存中的基址。因此,当进程加载到主内存时,所有的逻辑地址都会通过重定位加载器添加到基地址,以生成物理地址。

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

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

+0

加载时间绑定是否支持多编程操作系统? –

相关问题