我正在编写一个c代码,我想知道如果像乘法这样简单的操作,更多的CPU友好会带来任何差异,代码更快。例如,替换这行代码:
y = x * 15;
带
y = x << 4;
y -= x;
编译器是否已经这样做了?我应该使用-O2
选项才能实现吗?
答案 0 :(得分:6)
答案分为两部分:
总结一下,只有在你已经知道编译器做得不好的极少数情况下才能优化,这是一个必须解决的问题,你知道如何做得比编译器更好,并由此带来更多的维护成本是值得的。
答案 1 :(得分:3)
现在手动优化代码几乎总是徒劳无功,尤其是在高级语言中。虽然C几乎是装配,但现代编译器内置的技巧比大多数人都知道的要多得多。
此外,除非你要优化的代码将被用于 很多 ,即数百万次紧密连续,优化代码的工作将比你实现的节省花费更多的时间。
话虽如此,看看你的代码是否明显更快的唯一方法是测试它:将每个版本放在一个紧密循环中并执行一百万次(或更多次),看看是否有明显的差异。
请注意,您的优化适用于特定的乘数 - 您使用它的任何其他操作数将产生不同的结果。因为它不能一概而论,所以这个优化很可能在任何情况下由任何编译器完成 - 只是查看代码而不知道它将运行什么处理器架构,我可以不知道它是否会更快。