许多年前,C编译器并不是特别聪明.作为一种解决方法,K&R发明了register关键字,提示编译器,将这个变量保存在内部寄存器中可能是一个好主意.他们还使第三级运营商帮助生成更好的代码.
随着时间的推移,编译器逐渐成熟.他们变得非常聪明,他们的流量分析使他们能够更好地决定寄存器中的值,而不是你可能做的.register关键字变得不重要了.
由于别名问题,FORTRAN对于某些操作可能比C更快.从理论上讲,仔细编码可以解决这个限制,使优化器能够生成更快的代码.
有哪些编码实践可以使编译器/优化器生成更快的代码?
这是一个相关的问题
[编辑] 这个问题不是关于分析和优化的整个过程.假设程序编写正确,编译完全优化,测试并投入生产.您的代码中可能有一些构造禁止优化器尽其所能地完成最佳工作.您可以做什么来重构将删除这些禁令,并允许优化器生成更快的代码?
[编辑] 偏移相关链接
几年前,我参加了一个专家小组讨论相关高级嵌入式C程序员职位的候选人.
我问过的一个标准问题是优化技术.我很惊讶有些候选人没有答案.
因此,为了为后代制作一个列表,您在优化C程序时通常使用哪些技术和结构?
接受优化速度和大小的答案.
我正在改变我的for循环以增加使用++i而不是i++思考,这是否真的有必要了?当然,今天的编译器会自行完成这项优化.
在本文中,http://leto.net/docs/C-optimization.php,从1997年开始迈克尔·李进入其他优化,如内联,循环展开,循环干扰,循环反转,强度降低等等.这些仍然相关吗?
我们应该进行哪些低级代码优化,以及我们可以安全地忽略哪些优化?
编辑:这与过早优化无关.已经做出了优化的决定.现在问题是什么是最有效的方法.
轶事:我曾经审查了一个要求规范:"程序员应该离开一个而不是乘以2".