本文是对《深入理解计算机系统》第3章的一些总结。
-
什么是机器级程序
机器级程序只是一系列的字节序列,由多条指令组成,每条指令只完成一个简单的操作。 -
机器级程序最重要的抽象
机器级程序有两个最重要的抽象:①指令集架构(ISA),它定义了程序的格式和行为;②程序使用虚拟地址进行寻址,这使得内存看上去像是一个巨大的字节数组。 -
机器级程序可见而高层代码不可见的部分:
名称 | 用途 |
---|---|
PC | 指向下一条指令的地址 |
寄存器文件 | 16个64位寄存器,用以保存各类数据(比内存快得多) |
条件码寄存器 | 实现流程控制(if-else, while等等) |
向量寄存器 | 保存向量 |
-
程序栈和%rsp
%rsp是寄存器文件中的一个寄存器,专门用于保存程序栈的栈顶位置。当进行函数调用的时候,先执行push
操作,在栈顶空间中保存调用函数的下一条指令的地址;被调用函数返回后,执行pop
操作,PC取出栈顶的指令地址,将栈恢复原状,随后调用函数根据PC的指示,执行下一条指令。 -
对齐
数据的对齐,也就是其首地址需要满足一定的限制条件。具体而言,一个数据的首地址必须是该数据字节数的整数倍,我们将数据的字节数称为它的偏移要求。下图为一些例子:
对齐1.png
对齐2.png
拿B为例,i为4字节,地址偏移为0,没有问题;c为1字节,地址偏移需要加上i的尺寸,为4字节,没有问题;d为1字节,偏移需要为1的整数倍即可,所以为5也没有问题;j为8字节,偏移需要为8的整数倍,所以需要在d和j之间添上一段空白内容,以实现字节对齐,所以j的地址偏移为8;
对于例C而言,还需要在P3的尾部再添上一段空白内容,以实现2(K的最大值)的整数倍的字节偏移,所以P3的尺寸为10而不是9;
对于E而言,又揭示了一个特性,结构体的偏移要求K也就是内部各个成员的偏移K的最大值,所以结构体P5的成员t的偏移为24,因为t的类型P2的成员的K的最大值为8,所以对t的偏移要求也是K的整数倍。
网友评论