存储器简介 局部性 高速缓存 编写适合高速缓存的代码 总结 存储器简介 练习 6.2 计算一个磁盘的容量 磁盘容量 = 2 盘片 * 2面 * 10000个柱面=磁道 * 400个扇区 * 512个字节 = 8192000000, 换算成M 大概是 8192000000/1000/1000 = 81
现代处理器 处理器的抽象模型-关键路径 循环展开 并行计算 优化的限制因素 内存性能 章节总结 现代处理器 现代处理器并不是完全像之前的流水线模型一样 一条指令按照次序通过所有的流水线. 实际上一条指令的执行顺序不一定和机器代码的顺序相同, 译码也不是简单的将一条指令译成我们按照字节顺序取出的那样.
编译器的优化能力和局限性 表示程序性能 消除循环的低效 减少过程调用 消除内存引用 编译器的优化能力和局限性 编译器的一大安全的优化特点, 就是需要考虑程序所有的情况, 否则运行时可能会出问题. 比如在操作指针的时候, 如果两个参数相同, 其结果可能和希望的不同. 如果编译器无法确定, 则必须假设两
将处理指令的过程抽象为阶段 OPq系列指令和 rrmovq ,irmovq指令 rmmovq 和 mrmovq 指令 pushq 和 popq 指令 跳转指令 call 和 ret 条件传送系列指令 流水线 将处理抽象为阶段 要设计一个处理器, 需要将指令分为不同的阶段, 根据不同的阶段来优化. 各
HCL和布尔表达式 多路复用器 集合 存储器和时钟 HCL和布尔表达式 对于看过计算机系统要素的我, 这一部分的很多概念就很熟悉了. GO! HCL类似于用布尔表达式来书写门电路的组合方式, 像这个bool eq = (a && b) || (!a && !b);. 离散数学中提到, 不管多复杂的逻
简化的计算机模型和指令集 异常代码 特殊指令 - %rsp入栈出栈 简化的计算机模型和指令集 为了研究处理器的架构, CSAPP设计了一套简化的计算机模型和对应的指令集叫做Y86-64. 主要特点如下: 15个寄存器, 不包括%r15. 这样内部寻址可以用0-15来选择寄存器. %rsp依然用作栈指
浮点寄存器 浮点数指令 - 传送和转换操作 浮点数指令 - 寄存器分配 浮点数指令 - 浮点数的运算和浮点常数 浮点数指令 - 浮点数的位级操作 浮点数指令 - 浮点数比较 浮点寄存器 AVX2的浮点寄存器一共有16个, 命名比较规则, 从%YMM0 - %YMM15, 每个寄存器都是256位长.
指针 缓冲区溢出 缓冲区保护 变长栈帧 指针 这里借着底层知识实际上就把指针又复习了一遍, 指针有如下特性: 指针有类型, 是指向的是哪一类对象, 指针的类型对于机器级程序表示没有任何用处, 只是为了给编译器看和计算出地址 指针的值是一个无符号整数, 表示内存地址, 如果为0表示NULL, 即没有指
数组 结构 联合 数据对齐 数组 感觉CSAPP这里实际上是把C语言的数组和汇编语言一起讲了. 声明一个数组T A[N]实际上的意义如下: 分配N个T类型大小的连续空间 指向这个连续空间的第一个T类型大小的指针叫做A, A中的地址就是这个数组的第一个元素. 按照索引往后查找的时候, 只需要用地址加上