《程序是怎样跑起来的》第8章

第八章主要讲从源文件到可执行文件之间的过程和原理。从文章中我也就可以得出以下问题的答案了
计算机只能运行本地代码

  • 用某种编程语言编写的程序就称为源代码 ,保存源代码的文件称为源文件。
  • 源代码是无法直接运行的。这是因为,CPU 能直接解析并运行的不是源代码而是本地代码的程序。作为计算机大脑的Pentium 等 CPU,也只能解释已经转换成本地代码的程序内容。用任何编程语言编写的源代码,最后都要翻译成本地代码,否则 CPU 就不能理解。
    编译器负责转换源代码
  • 能够把 C 语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器。
  • 根据 CPU 类型的不同,本地代码的类型也不同。因而,编译器不仅和编程语言的种类有关,和 CPU 的类型也是相关的。
  • 交叉编译器,它生成的是和运行环境中的 CPU 不同的 CPU 所使用的本地代码。例如,在 Pentium 系列 CPU 的 Windows 这一运行环境下,也可以作成 SHA及 MIPS 等 CPU 用的 Windows CEB程序,而这就是通过使用交叉编译器来实现的。
    仅靠编译是无法得到可执行文件的
  • 编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。为了得到可以运行的 EXE 文件,编译之后还需要进行“链接”处理。
    程序加载时会生成栈和堆
  • 当程序加载到内存后,除此之外还会额外生成两个组,那就是栈和堆。栈是用来存储函数内部临时使用的变量(局部变量 ),以及函数调用时所用的参数的内存区域。 堆是用来存储程序运行时的任意数据及对象的内存领域。
  • EXE 文件中并不存在栈及堆的组。栈和堆需要的内存空间是在EXE 文件加载到内存后开始运行时得到分配的。因而,内存中的程序,就是由用于变量的内存空间、用于函数的内存空间、用于栈的内存空间、用于堆的内存空间这 4 部分构成的。
posted @ 2024-02-28 21:45  坠于星野  阅读(23)  评论(0)    收藏  举报