深入理解计算机系统——第三章

计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、 管理内存、 读写 存储设备上的数据,以及利用网络通信。 

编译器基于编程语言的规则、 目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。

在整个编译过程中, 编译器会完成大部分的工作, 将把用C语言提供的相对比较抽象的 执行模型表示的程序转化成处理器执行的非常基本的指令。

程序内存包含: 程序的可执行机器代码,操作系统需要的一些信息,用来管理过程调用和返回的运行时栈,以及用户分配的内存块(比如说用malloc库函数分配的)。 正如前面提到的,程序内存用虚拟地址来寻址。 在任意给定的时刻,只有有限的一部分虚拟地址被认为是合法的。

一条机器指令只执行一个非常基本的操作。 例如,将存放在寄存器中的两个数字相加,在存储器和寄存器之间传送数据,或是条件分支转移到新的指令地址。 编译器必须产生这些指令的序列,从而实现(像算术表达式求值、循环或过程调用和返回这样的)程序结构。

是一种数据结构,可以添加或者删除值, 不过要遵循 “后进先出” 的原则。 通过push操作把数据压入 战中, 通过pop操作删除数据;它具有一个属性: 弹出的值永远是最近被压入而且仍然在 栈中的值。 栈可以实现为一个数组, 总是从数组的一端插入和删除元素。 这一端被称为栈顶。 在 x86-64 中, 程序栈存放在内存中某个区域。  栈向下增长, 这样一 来, 栈顶元素的地址是所有战中元素地址中最低的。

你可能感兴趣的:(深入理解计算机系统——第三章)