《深入理解计算机系统》精华笔记:运算优化与系统架构

4星 · 超过85%的资源 需积分: 10 12 下载量 197 浏览量 更新于2024-07-27 收藏 6.93MB DOC 举报
"深入理解计算机系统笔记" 深入理解计算机系统是一项关键的技能,这涉及到对计算机硬件、操作系统、编译原理等多个方面的综合掌握。这份笔记是作者基于阅读《深入理解计算机系统》一书的深入学习和理解整理而成,旨在帮助读者更好地领会计算机系统的运作机制。 1. 计算机数值运算: - 截断数字:对于无符号数x,截断到k位相当于计算x mod 2^k,即保留最右边k位。 - 整数运算速度:整数乘法通常较慢,可能需要12个或更多时钟周期,而加法、减法、位移等操作只需1个时钟周期。编译器会利用这些特性进行优化,用移位和加法替代乘法。 - 整数除法:比乘法更慢,但除以2的幂可以用右移代替,无符号数用逻辑右移,有符号数用算术右移。 2. 计算机体系结构: - IA32(x86)和x86-64(x64)是常见的CPU架构,IA64则是与32位不兼容的Intel架构。 - 在x64架构中,`long`类型是8字节,指针同样也是8字节。 3. 编译过程: - 包含预处理器、编译器、汇编器和链接器四个阶段,分别处理源代码的不同方面,最终生成可执行文件。 4. SIMD并行: - 单指令多数据并行技术,如SSE指令集,用于提高向量数据处理效率。 5. 数据类型转换: - 无符号数右移使用逻辑右移,有符号数通常用算术右移。 - 强制类型转换规则:有符号数与无符号数混合运算时,有符号数会被转换为无符号数。 - 类型扩展:如`short`转`unsigned`,先扩展大小再进行符号转换。 6. 补码运算: - 负数的补码移位会向下舍入。 - 计算补码非:从左到右找到第一个1之前的位全部取反。 7. 浮点运算: - 浮点加法和乘法不具有结合性和分配性,可能导致精度损失。 8. 预处理、编译、汇编和链接: - 预处理器扩展宏和包含文件,编译器生成汇编代码,汇编器转为机器代码,链接器处理外部引用生成可执行文件。 9. 寄存器与内存操作: - 寄存器可以存储值或地址,如`(%eax)`表示`eax`寄存器中的地址值。 - 传送指令不能同时操作两个内存位置。 - 栈指针 `%esp` 保存栈顶元素地址,`%eax`通常用于保存函数返回值。 - 栈从高地址向低地址增长,堆从低地址向高地址增长。 10. LEA指令: - LEA(Load Effective Address)指令,用于计算有效地址,它可以做算术运算,具体取决于操作数。 11. 操作有无符号值: - 不同类型的汇编指令用于处理有符号和无符号值,确保正确执行计算。 这些知识点涵盖了计算机系统中的基本概念,对于理解和优化程序性能,以及解决计算机系统相关问题非常有价值。