问题标签 [gcc-4.2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
71 浏览

c++ - 枚举导致二进制更改与 Gcc 4.2.4 中的优化

我正在使用 GCC 版本 4.2.4。下面解释的问题无法在 Gcc 4.6.x 上重现,这是我测试的仅有的两个版本。

我有一个定义枚举的头文件,标题:abc.h

这个头文件包含在几个源文件中,每个源文件在编译时创建一个对象 (.o)。并且很少有源文件不引用 abc.h 中的任何枚举。

我看到的问题是,如果我在 abc.h 中添加一个新常量 (VALUE_3),那么不使用任何枚举的对象的二进制 md5sum 也会发生变化。这仅在我应用优化时发生,而不是在编译时发生。

我怀疑它与启用优化的标志 -ftree-vrp 和 -ftree-dominator-opts 有关。将这些标志与 -fno 一起使用仍会导致某些对象发生更改,但会阻止其他少数对象发生更改(使用这些标志进行更改)。

另一个有趣的观察是 md5sum 对于偶数或奇数的枚举是相同的。

任何人都可以帮助我了解后端发生了什么,并且当该特定对象没有实际代码更改时,是否有任何方法可以避免二进制更改以维护 md5sum。

提前致谢。

编辑:

对于一个对象,以下是差异。对于其他对象,也几乎没有其他更改(在 mov 等指令中)。如您所见,仅交换了某些指令中的操作数寄存器。我想了解原因以及如何通过优化来避免它。

0 投票
1 回答
661 浏览

c - 在终端中使用 GCC 编译的“函数声明符后的预期函数体”

我正在尝试在终端中使用 GCC 编译以下程序

收到以下错误在此处输入图像描述

我需要了解什么是