从GCC获得优化的源代码
Get optimized source code from GCC
我有一个任务,创建优化的c++源代码,并把它给朋友编译。这意味着,我不控制最终的编译,我只是编写c++程序的源代码。
我知道,a可以在编译过程中使用GCC的- 01(和-O2等)选项进行优化。但是我怎样才能得到这个优化的源代码而不是编译好的程序呢?我不能配置我朋友的编译器的参数,这就是为什么我需要在我这边做一个好的源代码。
GCC执行的优化是低级的,这意味着您将不会再次获得c++代码,而是在最好的情况下获得汇编代码。但是你将无法转换它或其他。
总而言之:优化源代码在代码级别,而不是对象级别。
您可以要求GCC在各个"阶段"转储其内部 (simple,…)表示。GCC的中间端由数百个传递组成,您可以要求GCC转储它们,使用诸如-fdump-tree-all
或-fdump-gimple-all
这样的参数;注意,一次编译可能会得到数百个转储文件!
然而,GCC的内部表示是相当低级的,如果不阅读大量的材料,你不应该期望理解它们。
我提到的转储选项对于那些在GCC内部工作,或者通过用C编码的插件或用MELT(扩展GCC的高级领域特定语言)编码的扩展来扩展它的人来说大多是有用的。我不确定它们对你的朋友会有多大用处。但是,它们可以帮助您理解优化传递执行了许多复杂的处理。不要忘记过早的优化是邪恶的:您应该首先使您的程序正确运行,然后对其进行基准测试和配置,最后优化值得您努力的少数部分。你可能写不出正确的&高效的程序,无需自己测试和运行,然后再把它们交给你的朋友。
简单-选择最好的算法,其余的由优化器处理。
优化源代码与优化二进制文件不同。你优化源代码,编译器将优化二进制文件。
对于算法选择以外的任何事情,您都需要做一些分析。当然,有些做法可以加快代码速度,但有些做法会降低代码的可读性。
相关文章:
- 空基优化子对象的地址
- 在Linux中哪里可以找到互斥、未来等的源代码
- 关闭||运算符优化
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 难以理解某些人解决IOI问题的源代码
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 使用g++编译hdf5源代码
- 纯函数,为什么没有优化
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何以优化的方式同时迭代两个间距不相等的数组
- 小字符串优化(调试与发布模式)
- 如何使用C++读取另一个程序中的源代码输出
- 从源代码构建编译器是否会带来更好的优化
- 如何使用objdump在高度优化的对象文件中交错源代码
- 从GCC获得优化的源代码
- 优化源代码结构的c++项目