【发布时间】:2016-11-28 00:12:09
【问题描述】:
我和我的朋友使用 GCC 将相同的 .c 文件转换为 .s 以完成我们的作业。但是我们都得到了不同的汇编语言代码。
我 操作系统:- 使用 GCC 4.7.2 的 Windows 10
朋友 操作系统:- 使用 GCC 4.7.2 的 Ubuntu
【问题讨论】:
-
可能会传递不同的编译器选项,例如优化级别。
-
默认选项可能不同。您可以通过
g++ -dumpspecs >the_default_specs.txt查看。 -
不同的平台 == 不同的代码生成。不同平台上的相同编译器==不同的实现细节==不同的代码生成。 (可能)在构建期间使用的不同编译器选项 == 不同的代码生成。
-
发布编译后的代码将有助于解释为什么代码不同
-
没有理由期望它们是相同的。相同的编译器相同的机器不同的构建选项,不同的编译器选项等将产生截然不同的代码。开始改变平台、编译器版本、构建选项等,相同源的输出将继续变化。基本上没有理由期望它们匹配。相同的计算机相同的选项,相同的编译器,相同的日期(有时你需要相同的分钟或秒,如果有时间戳)相同的源,你可以开始期待一致性。