C++ 优化器优化c++;或组装

C++ 优化器优化c++;或组装,c++,c,optimization,C++,C,Optimization,优化器(这里一般说来)是采用我的c/c++代码并编写更好的c/c++代码,还是直接将其翻译成汇编,然后进行优化。还是一个组合 编辑: 我正在使用gcc(但我想知道其他人也在做什么) 做优化器 优化器(或更好的优化策略)附带特定的编译器实现 你的问题没有一般的答案 编写更好的c/c++代码,或者直接将其翻译成汇编 不,他们的工作是优化后端代码,可能是目标程序集或任何中间机器代码。因此,没有中间优化的C++代码可以预期。 < P>优化器不重写C/C++代码。 编译器进行词法分析,然后使用代码的某种

优化器(这里一般说来)是采用我的c/c++代码并编写更好的c/c++代码,还是直接将其翻译成汇编,然后进行优化。还是一个组合

编辑: 我正在使用gcc(但我想知道其他人也在做什么)

做优化器

优化器(或更好的优化策略)附带特定的编译器实现

你的问题没有一般的答案


编写更好的c/c++代码,或者直接将其翻译成汇编


不,他们的工作是优化后端代码,可能是目标程序集或任何中间机器代码。因此,没有中间优化的C++代码可以预期。

< P>优化器不重写C/C++代码。 编译器进行词法分析,然后使用代码的某种内部图形表示进行语义分析。优化器首先处理此内部表示以识别和(例如常量传播)

一旦代码生成可以开始,优化器将再次干预,以进行依赖于macine的优化(寄存器分配、特殊指令集,如intel等)


只有在最后,它才会生成汇编代码

优化器可以处于不同的级别,但通常不会生成新的可读代码(尽管有时在其他语言中会发生这种情况,例如JavaScript)

GCC生成一个中间表示:

然后对该结构应用优化。请参阅此处的更多信息,例如:


从那里,后端将其转换为最终的机器代码(尽管我相信这一部分也涉及到优化)。

您考虑的是哪种特定的优化器?其他编译器,例如clang,也使用代码的中间表示形式。在clang的例子中,这就是LLVM在为目标机器发出asm或机器代码之前优化的内容。顺便说一句,“特定于目标”的优化,如在x86上用
xor-reg,reg
替换
mov-reg,0
,或利用
lea
进行各种优化,称为“窥视孔”优化