我正在编写一个 C 代码,我想知道使简单的操作(如乘法)对 CPU 更友好是否有任何不同并且代码更快。例如,替换这行代码:
y = x * 15;
与
y = x << 4;
y -= x;
编译器是否已经这样做了?我应该使用 -O2
选项来实现它吗?
最佳答案
答案分为两部分:
- 不,除非您正在编写一个非常专业的函数(例如,一个必须在 20 个时钟周期内执行的信号处理函数),否则您不应该进行优化;把它留给编译器。通常,您的工作是编写可读代码,编译器将(根据其能力对其进行优化)。请注意,不同处理器的优化会有所不同,因为它们的硬件(计算能力)可能非常不同。例如,按 N 条指令进行移位(就像您的代码中的那样)在具有常规移位器的处理器上可能需要 N 个时钟,但在具有硬件桶形移位器的处理器上只需要一个时钟(或更少)。
- 是的,大多数现代优化编译器将在没有显式优化选项的情况下进行优化(例如,在适当的地方通过移位替换乘法)。
总结一下,只在极少数情况下优化,当你已经知道编译器做得不好时,这是一个必须解决的问题,你知道如何比编译器做得更好,并由此增加维护成本是值得的。
关于c - 我应该自己优化我的代码还是让编译器/gcc 来做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43220141/