我们的编译器课程功能练习要求我们比较与-O和-O3 gcc选项构建的代码。我的机器生成的代码与课程中的代码不一样。有没有一种方法可以计算出课程中使用的优化选项,以便在我的机器上获得相同的代码,并进行更有意义的观察?
我找到了如何在我的机器上获得优化选项:
$ gcc -O3 -Q --help=optimizer但是,是否有一种方法可以在教授的机器上推断出这些内容,除非尝试并逐一修改(.ident "GCC:(Debian4.3.2-1.1) 4.3.2")?
感谢您的关注。
编辑:我注意到在我的机器上生成的代码缺少我的教授生成的序言和结语。有没有办法强制生成序言(google似乎没有带来多少)?
发布于 2014-10-26 19:54:38
下面是您需要了解的编译器优化:它们依赖于体系结构。此外,它们主要是不同版本的编译器(gcc-4.9做了更多的东西,默认情况下比gcc-4.4)。在体系结构上,我指的是CPU微体系结构(Intel:Nehalem,Sandy,Ivy bridge,Haswell,KNC . AMD:Bobcat,Bulldozzer,Jaguar,.)。编译器通常转换输入代码(C,C++,ADA,.)进入一个与CPU无关的中介表示(GIMPLE,,用于GCC),在该表示上将执行大量的优化。之后,编译器将生成一个更接近程序集的低级表示形式。对于后者,将展开特定于体系结构的优化。此类优化包括选择延迟最低的指令,根据循环大小、指令缓存大小确定循环展开因子,等等。由于您生成的代码与您在类中得到的代码不同,所以我认为底层架构肯定是不同的。在这种情况下,即使使用相同的编译器标志,也无法获得相同的程序集代码(即使没有优化,也会得到不同的程序集代码)。为此,你应该集中精力比较优化代码和非优化代码,而不是试图坚持课堂上给出的内容。我甚至认为,将您的优化代码与您所得到的代码进行比较,是一个很好的反向工程练习。您可以找到我前面关于here中编译器优化的文章之一。关于这一主题的两本伟大的书是由Aho、Seti和Ulman编写的The Dragon (编译器:原理、技术和工具),以及Engineering a Compiler,由Keith和Linda撰写。
https://stackoverflow.com/questions/26574747
复制相似问题