【问题标题】:Changes in gcc/persistence of optimization flags gcc/Cgcc/persistence 的优化标志 gcc/C 的变化
【发布时间】:2023-03-30 06:51:02
【问题描述】:

只是好奇。在 Ubuntu 9.10 下使用 gcc/gdb。

阅读 C 书,也经常给出目标文件的反汇编。一月份看的时候,我的拆解看起来很像书的;现在,它完全不同了——可能更优化了(我注意到现在汇编代码中有一些重新排列,至少在我检查的文件中,看起来优化了)。我在第一次和第二次读取之间为 gcc 使用了优化选项 -O1 - -O3,但在第一次读取之前没有。

(1) 优化选项的使用是否持久,也就是说,如果您使用它们一次,您会一直使用它们直到关闭它们?那会很奇怪(浏览了 man 文件,至少没有看到任何类似的东西)。万一这是真的,你如何关闭它们?

(2) gcc 的程序集是否因最近的升级而改变?

(3) 尽管选择了相同的编译选项,gcc 是否有时会产生(显着)不同的汇编代码?

非常感谢。

【问题讨论】:

    标签: c gcc disassembly


    【解决方案1】:

    1) 不,选项不会持续存在。

    2) 是的,优化器一直在不断变化和改进。如果您的 gcc 软件包已经升级,那么为特定源文件生成的程序集很可能会发生变化。

    3) 用 gcc 编译是一个确定性的过程;如果您使用相同版本的 gcc 和相同目标的相同选项编译相同的源代码,则生成的程序集应该是相同的(以某些符号名称为模)。

    【讨论】:

    • GCC 对某些符号名称( -frandom-seed )使用随机数,我想我记得读过一些版本在某些架构上使用 -O3 分支概率的非确定性启发式算法,除非被告知不要.不过,我无法找到第二部分的信息。
    • 实际上,一些优化器是顺序敏感的——如果你改变事物的顺序而不是事物本身,优化器可能会产生不同的输出。它们也可能对诸如可用内存量之类的东西很敏感。我不知道 gcc 优化器是否对这些东西敏感,
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2013-05-09
    相关资源
    最近更新 更多