从GCC获取优化的源代码

时间:2011-12-19 07:59:31

标签: c++ gcc optimization g++

我有一项任务是创建优化的C ++源代码并将其提供给朋友进行编译。这意味着,我不控制最终的编译,我只是编写C ++程序的源代码。

我知道,a可以在编译期间使用GCC的-O1(以及-O2和其他)选项进行优化。但是如何才能获得这个优化的源代码而不是编译的程序呢?我无法配置朋友编译器的参数,这就是为什么我需要在我这边做一个好的来源。

3 个答案:

答案 0 :(得分:5)

GCC执行的优化是低级别的,这意味着您不会再次获得C ++代码,而是在最佳情况下获得汇编代码。但你无法转换它或其他东西。

总之:在代码级别优化源代码,而不是在对象级别。

答案 1 :(得分:3)

你可以要求 GCC 转储 内部(Gimple,...)陈述 “阶段”。 GCC的中端由数百个传递组成,您可以要求GCC转储它们,arguments-fdump-tree-all-fdump-gimple-all;请注意,您可以为单个编译获得数百个转储文件!

然而,海湾合作委员会的内部陈述水平相当低,如果不阅读大量材料,你不应该期望理解它们。

我提到的转储选项对于在GCC内部工作的人来说非常有用,或者通过用{C}编码的插件或用MELT编码的扩展扩展它(扩展GCC的高级域特定语言。我不确定它们对你的朋友会非常有用。但是,它们可以帮助您了解优化过程执行大量复杂处理。

不要忘记过早优化是邪恶的:您应首先使您的程序正确运行,然后对其进行基准测试和分析,最后优化您努力的几个部分。你可能无法写出正确的&高效的程序,在将它们交给你的朋友之前,没有自己测试和运行它们。

答案 2 :(得分:1)

简单 - 选择可能的最佳算法,其余部分由优化器处理。

优化源代码与优化二进制文件不同。 优化源代码,编译器将优化二进制文件。

除了算法选择之外,您还需要进行一些分析。当然,有些方法可以加快代码速度,但有些方法会降低代码的可读性。只有在必要时和测量后才能进行优化。