(Linux)gcc进行优化编译的参数是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(Linux)gcc进行优化编译的参数是啥?相关的知识,希望对你有一定的参考价值。
优化编译的参数是:-O [注意,是大写字母O,来自英文 Optimize]
-O1 [优化1,正常优化]
-O2 [优化2,优化程度高一级]
-O3 [优化3,优化程度最高]
不优化是 -O0
详细情况用:
man gcc
阅读 "OPTIMIZATION OPTIONS" 那部分 参考技术A 将file.c文件编译产生可执行文件myprog(-o选项),并且在编译的时候,生成调试信息(-g信息)。让gdb调试器可以调试该程序。
gcc是编译器程序名字
-o是可执行文件名字输出参数
-g是插入调试信息参数
当然是调试可执行文件myprog
从 GCC 获取优化的源代码
【中文标题】从 GCC 获取优化的源代码【英文标题】:Get optimized source code from GCC 【发布时间】:2011-12-19 07:59:31 【问题描述】:我的任务是创建优化的 C++ 源代码并将其提供给朋友进行编译。也就是说,我不控制最终的编译,我只写C++程序的源代码。
我知道,a 可以在编译期间使用 GCC 的 -O1(以及 -O2 和其他)选项进行优化。但是我怎样才能得到这个优化的源代码而不是编译的程序呢?朋友编译器的参数我无法配置,所以我需要自己做一个好的源码。
【问题讨论】:
虽然您可以编写“优化”的源代码,但要考虑诸如缓存和微调算法之类的事情(数学背景可能会有所帮助),如果您无法运行分析,则很难编写最佳代码在目标系统上找到您的瓶颈。 【参考方案1】:GCC 执行的优化是低级的,这意味着您不会再次获得 C++ 代码,而是最好的情况下获得汇编代码。但是您将无法转换它或其他东西。
总而言之:优化源代码在代码级别,而不是对象级别。
【讨论】:
【参考方案2】:您可以要求 GCC 以各种方式转储其内部(Gimple,...)representations “阶段”。 GCC的中端是由数百个pass组成的,你可以让GCC转储它们,arguments like -fdump-tree-all
or -fdump-gimple-all
;请注意,一次编译可以获得数百个转储文件!
但是,GCC 的内部表示是相当低级的,你不应该期望不阅读大量材料就能理解它们。
我提到的转储选项对于那些在 GCC 中工作的人来说非常有用,或者通过用 C 编码的 plugins 或用 MELT 编码的 extensions 来扩展它(高级域特定语言来扩展 GCC)。我不确定它们对您的朋友是否有用。但是,它们可以帮助您了解优化过程会进行很多复杂的处理。
别忘了过早的优化是邪恶的:你应该首先让你的程序正确运行,然后对它进行基准测试和分析,最后优化你努力的几个部分。在将它们交给朋友之前,如果不亲自测试和运行它们,您可能无法编写正确且高效的程序。
【讨论】:
【参考方案3】:简单 - 选择可能的最佳算法,让优化器处理其余的。
优化源代码与优化二进制文件不同。 您优化源代码,编译器会优化二进制。
除了算法选择之外,您还需要进行一些分析。当然,有些做法可以加快代码速度,但有些做法会降低代码的可读性。仅在必要时和测量后进行优化。
【讨论】:
这更像是“你应该尝试优化算法,编译器会尝试优化二进制"以上是关于(Linux)gcc进行优化编译的参数是啥?的主要内容,如果未能解决你的问题,请参考以下文章