《程序员升职记》 第二年 繁忙的收发室

题目为把inbox里的东西放入outbox,非常简单,代码如下:
在这里插入图片描述

运行的结果都会如下图所示:

在这里插入图片描述
其中优化诊断是指代码的简洁。而效率诊断是指代码效率。也就是是说我们刚刚的代码虽然够简洁,但是并没有达到效率要求。
我们该如何修改代码呢?
在这里插入图片描述
想想很多小伙伴看到后会疑问,这有什么区别?
当然有区别,最明显的就是运行结果。
在这里插入图片描述
可以看到,与上面的结果相比,损失了代码简洁性,但得到的是效率。其实这道题目就是想告诉我们,在反复做一些重复性的工作时,我们可以在一个循环里运行多次,这样可以减少循环语句的次数进而提高效率。
这种牺牲代码简洁性获取效率的方法的专业术语叫做循环展开

循环展开 ,英文中称(Loop unwinding或loop unrolling),是一种牺牲程序的尺寸来加快程序的执行速度的优化方法。 可以由程序员完成,也可由 编译器 自动优化完成。 循环展开最常用来降低循环开销,为具有多个功能单元的处理器提供 指令级并行 。 也有利于 指令流水线 的调度。 可以由程序员完成,也可由 编译器 自动优化完成。
循环展开通过将 循环体 代码复制多次实现。 循环展开能够增大指令调度的空间,减少循环分支指令的开销。 循环展开可以更好地实现数据预取技术。 [1] 由于展开能够消除分支以及一些管理归纳变量的代码,因此可以摊销一些分支开销。

之前跟老师做底层优化的时候就经常听到说要对函数做循环展开和软件流水。当时根本不知道什么是软件流水和循环展开,只知道这样能提高效率。
我找到一篇评论反馈良好的讲软件流水的文章,还没学汇编,所以自己看不是很懂。链接如下:https://blog.csdn.net/diyinqian/article/details/86360396
等以后一定回头看看。

Guess you like

Origin blog.csdn.net/m0_45972156/article/details/119360494