从GCC获得优化的源代码

Get optimized source code from GCC

本文关键字:源代码 优化 GCC      更新时间:2023-10-16

我有一个任务,创建优化的c++源代码,并把它给朋友编译。这意味着,我不控制最终的编译,我只是编写c++程序的源代码。

我知道,a可以在编译过程中使用GCC的- 01(和-O2等)选项进行优化。但是我怎样才能得到这个优化的源代码而不是编译好的程序呢?我不能配置我朋友的编译器的参数,这就是为什么我需要在我这边做一个好的源代码。

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

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

您可以要求GCC在各个"阶段"转储内部 (simple,…)表示。GCC的中间端由数百个传递组成,您可以要求GCC转储它们,使用诸如-fdump-tree-all-fdump-gimple-all这样的参数;注意,一次编译可能会得到数百个转储文件!

然而,GCC的内部表示是相当低级的,如果不阅读大量的材料,你不应该期望理解它们。

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

不要忘记过早的优化是邪恶的:您应该首先使您的程序正确运行,然后对其进行基准测试和配置,最后优化值得您努力的少数部分。你可能写不出正确的&高效的程序,无需自己测试和运行,然后再把它们交给你的朋友。

简单-选择最好的算法,其余的由优化器处理。

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

对于算法选择以外的任何事情,您都需要做一些分析。当然,有些做法可以加快代码速度,但有些做法会降低代码的可读性。