c - 我应该自己优化我的代码还是让编译器/gcc 来做

标签 c gcc compilation

我正在编写一个 C 代码,我想知道使简单的操作(如乘法)对 CPU 更友好是否有任何不同并且代码更快。例如,替换这行代码:

 y = x * 15;

 y = x << 4;
 y -= x;

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

最佳答案

答案分为两部分:

  1. 不,除非您正在编写一个非常专业的函数(例如,一个必须在 20 个时钟周期内执行的信号处理函数),否则您不应该进行优化;把它留给编译器。通常,您的工作是编写可读代码,编译器将(根据其能力对其进行优化)。请注意,不同处理器的优化会有所不同,因为它们的硬件(计算能力)可能非常不同。例如,按 N 条指令进行移位(就像您的代码中的那样)在具有常规移位器的处理器上可能需要 N 个时钟,但在具有硬件桶形移位器的处理器上只需要一个时钟(或更少)。
  2. 是的,大多数现代优化编译器将在没有显式优化选项的情况下进行优化(例如,在适当的地方通过移位替换乘法)。

总结一下,只在极少数情况下优化,当你已经知道编译器做得不好时,这是一个必须解决的问题,你知道如何比编译器做得更好,并由此增加维护成本是值得的。

关于c - 我应该自己优化我的代码还是让编译器/gcc 来做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43220141/

相关文章:

c - 为什么我的共享库在编译为位置无关代码时要大得多?

Java:Eclipse:找不到主类

c++ - 重新分配的性能

c - 结构体内部的 union

c++ - 进入子进程时gdb中断

c - POSIX 数据类型的格式说明符

GCC 中的优化

Python:使用编译/评估时出现段错误

c - 重新编译相同的代码会在 VC++ 中生成不同的可执行文件

c - 是否可以创建一个可以以不同结构运行的函数(用 C 语言)?