【问题标题】:Why does the assembly language code differs for the same C code from various PC with same processor ( intel x86_64 ) [closed]为什么具有相同处理器(intel x86_64)的各种PC的相同C代码的汇编语言代码不同[关闭]
【发布时间】: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查看。
  • 不同的平台 == 不同的代码生成。不同平台上的相同编译器==不同的实现细节==不同的代码生成。 (可能)在构建期间使用的不同编译器选项 == 不同的代码生成。
  • 发布编译后的代码将有助于解释为什么代码不同
  • 没有理由期望它们是相同的。相同的编译器相同的机器不同的构建选项,不同的编译器选项等将产生截然不同的代码。开始改变平台、编译器版本、构建选项等,相同源的输出将继续变化。基本上没有理由期望它们匹配。相同的计算机相同的选项,相同的编译器,相同的日期(有时你需要相同的分钟或秒,如果有时间戳)相同的源,你可以开始期待一致性。

标签: c gcc assembly


【解决方案1】:

您编写的程序被编译为在两个不同的操作系统上运行。两者都有自己的一套系统调用和调用约定。编译后的代码将有不同的传递参数的方式、用于传递值的寄存器和选择的优化级别。

【讨论】:

  • 我们还不知道 C 程序是什么...
  • 是的...但它至少包含一个函数调用,如 printf。所以会不一样
  • 他也可能在交叉编译... :) 没有那些 .s 文件很难说 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2021-09-16
  • 1970-01-01
  • 2010-11-09
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多