是否可以使用GCC获得中间的优化C文件?

时间:2014-12-26 14:50:28

标签: c gcc optimization

我有一些循环的C代码:

for(int i=0; i<1000; i+=ceil(sqrt(i)))
{
    do stuff that could benefit from loop unrolling;
}

我打算使用宏命令告诉GCC展开循环,但是我想确保在这种情况下确实会展开循环(因为增量不是1,但它仍然可以预处理和展开)。

是否有可能让GCC在优化后输出包含代码的.C文件? (希望包括它在组装级优化之前对-O进行的任何优化)?

我知道我可以使用汇编输出来确认这一点,但我宁愿在C中看到一些东西 - 我更容易阅读和理解。

1 个答案:

答案 0 :(得分:5)

C是一种高级编译语言。因此,它不是优化机器代码的适当表示。虽然,您可能觉得看到C代码更容易理解,但它缺乏程序集的绝对精度,它直接映射到机器代码。对于这个简单的例子,您可能非常清楚优化在高级语言方面意味着什么,但通常情况下优化并非如此。查看汇编语言可以准确显示编译器已完成的操作。

其次,编译器对某种intermediate representation (IR)执行优化,这类似于机器代码而不是高级代码(在本例中为C)。要在执行优化后输出高级代码,需要进行反编译步骤。 GCC不适合为很少使用的功能添加反编译逻辑。但是,如果确实希望在C中看到优化的代码,您可以通过反编译器运行GCC生成的程序集以获得高级代码。

简短回答:GCC不会做你想做的事,但你可以用装配反编译器从汇编中生成C代码。

Here is a stack overflow thread about choosing a good C decompiler for linux.