我应该自己优化我的代码还是让编译器/ gcc来完成它

Roi*_*tam 3 c gcc compilation

我正在编写交流代码,我想知道如果进行简单的操作,如乘法,更多的CPU友好使任何差异和代码更快.例如,替换这行代码:

 y = x * 15;
Run Code Online (Sandbox Code Playgroud)

 y = x << 4;
 y -= x;
Run Code Online (Sandbox Code Playgroud)

编译器是否已经这样做了?我应该使用该-O2选项才能实现吗?

小智 6

答案分为两部分:

  1. 不,除非你正在编写一个非常专业的函数(例如必须在20个时钟内执行的信号处理函数),否则你不应该优化; 把它留给编译器.一般来说,你的工作是编写可读代码,编译器将(它的功能优化它).请注意,对于不同的处理器,优化将是不同的,因为它们的硬件(计算能力)可能非常不同.例如,N指令的移位(与代码中的指令相同)可能会在具有常规移位器的处理器上占用N个时钟,但在具有硬件桶形移位器的处理器上需要一个时钟(或更少).
  2. 是的,大多数现代优化编译器都会优化(例如,在适当的情况下通过移位替换乘法),而无需明确的优化选项.

总结一下,只有在您已经知道编译器没有做好工作的极少数情况下进行优化,这是一个必须解决的问题,您知道如何做得比编译器更好,并且由此带来的维护成本增加值得它.