展开 gcc 编译器优化

Posted

技术标签:

【中文标题】展开 gcc 编译器优化【英文标题】:Unrolling gcc compiler optimization 【发布时间】:2010-10-28 11:05:46 【问题描述】:

我有兴趣查看 gcc 实际优化代码的代码。有什么办法吗?

我经历过一些其他类似的问题,我尝试过以下几件事,

    -Wa,ahl=filename.lst :-这个选项真的很好,可以浏览代码和对应的机器码,但是我开启O3选项就不好了。 转储优化树:- 我确信 gcc 给了我大量的调试信息。但我不知道如何破译它。如果有人能指出任何可用信息,我会很高兴。

还有其他更好的方法,找出gcc优化的代码部分吗?

谢谢, 马杜尔

【问题讨论】:

你试过 gcc -O3 -S myFile1.c 吗?输出文件将是优化的程序集文件 myFile1.s。要查看优化,最好阅读汇编代码。 【参考方案1】:

你可以编译代码两次,首先是:

$ gcc -O0 -S -o yourfile_o0.s

然后用:

$ gcc -O3 -S -o yourfile_o3.s

然后你可以diff生成的两个汇编文件:

$ diff -u yourfile_o0.s yourfile_o3.s
$ vim -d yourfile_o0.s yourfile_o3.s
$ emacs --eval '(ediff "yourfile_o0.s" "yourfile_o3.s")'

【讨论】:

+1,这就是我过去在我更好奇的时刻所做的 :-) 您介意将每个命令放在不同的行上吗?我认为它会更好地阅读。 :)【参考方案2】:

查看汇编代码或反编译已编译的应用程序。 C 反编译器生成丑陋的 C 代码,但要分析生成了哪些代码,就足够了。

【讨论】:

以上是关于展开 gcc 编译器优化的主要内容,如果未能解决你的问题,请参考以下文章

GCC - 仅在特定功能上启用编译器标志

优化编译器如何决定何时展开循环以及展开循环的程度?

《编译 - 编译杂记》GCC优化等级说明

如何在 gcc 中禁用编译器优化?

MinGW(GCC)编译时的优化参数是啥?

基于GCC的编译器的优化等级的执行原理