如果你问我怎样优化条件分支(针对不知道为什么三目运算符和switch快的同学)

在csapp中对分支怎样优化以及为什么这样优化的原因有很详细的描述,我这里就是当一个搬运工来说一说三目运算符和switch语句。

要了解三目运算符的加速原因首先要知道现代处理器的加速机制——流水线(cpu的工作由取指令,翻译指令,读数据,运算,写数据,跳到下一条指令组成)

图片发自简书App

图片发自简书App

做流水线的主要原因就是cpu运算太快了,从内存读数据的时候你不能让cpu在那干等啊,所以就需要并行,多个进程一起跑,这个读数据的时候让那个进程去使用cpu的运算资源,总之就是不让cpu闲着(图只能大概说明一下,画得不好,等看完四五章再详细说流水线)。

而条件分支会打断流水,这个很好理解,因为程序在运行到分支之前无法预测要进哪一个分支,我无法让每条线上都布满像ABC…那样明确的步骤,三目运算符恰好解决了这个问题,它将分支语句变成了明确的步骤,从而可以实现流水

图片发自简书App

但是三目运算符的使用范围十分有限,它只能做这种简单运算的分支,如果条件中有很多运算的话它就搞不定了。

至于switch语句,它就是通过一张跳转表来实现直接跳转到分支(与一堆if else if相比)

最后我觉得switch翻译成汇编后蛮有意思的,所以我用一道题目再来说明一下

图片发自简书App

switch中变量的跳转总是从0开始,而第二句汇编将x加2,所以说标号最小是-2,三四句说明-2再往前数六个数就直接跳出了(default包含所有不在case中的数)考虑到case最小是-2故最大应该是4,L2处是默认case-1,所以语句内的标号是-2 0 1 2 3 4。(中文版147页)

最后,以上内容均搬运自csapp,如有雷同…

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容