CSAPP读书笔记(三)一一程序的机器指令与优化

机器指令

处理器

程序计数器(PC, Program counter)

存着下一条指令的地址,在 x86-64 中称为 RIP

寄存器(Register)

用来存储数据以便操作

常用的寄存器

前六个寄存器(%rax, %rbx, %rcx, %rdx, %rsi, %rdi)称为通用寄存器

  • %rax(%eax) 用于做累加

  • %rcx(%ecx) 用于计数

  • %rdx(%edx) 用于保存数据

  • %rbx(%ebx) 用于做内存查找的基础地址

  • %rsi(%esi) 用于保存源索引值

  • %rdi(%edi) 用于保存目标索引值

条件代码(Codition codes)

通常保存最近的算术或逻辑操作的信息,用来做条件跳转

程序优化

  • 用好编译器的不同参数设定

  • 写对编译器友好的代码,尤其是过程调用和内存引用,时刻注意内层循环

  • 根据机器来优化代码,包括利用指令级并行、避免不可以预测的分支以及有效利用缓存

优化技巧

代码移动

循环体里面不应该包含哪些只有一个结果的表达式

减少计算强度

个人感觉对于现代处理器来说,那个什么把乘法转成加法或者是移位什么的操作,通通都是多余的了,现在处理器速度这么快,这样也并不能改变什么性能了

注意内存问题

处理条件分支