【问题标题】:Does the C++ code compile to assembly codes?C++ 代码是否编译为汇编代码?
【发布时间】:2011-06-14 08:10:21
【问题描述】:

C++ 代码是否编译为汇编代码?如果我们有 C++ 代码,我们能得到汇编代码吗?

【问题讨论】:

标签: c++ assembly compilation


【解决方案1】:

绝大多数 C++ 编译器会将 C++ 源代码转换为目标文件(具有足够控制信息以链接到可执行文件的机器代码)。他们可能实际上生成汇编语言作为中间步骤,甚至使用单独的汇编程序来处理汇编程序源代码,但您通常永远不会看到这一点。例如,您实际上必须竭尽全力让gcc 使用-S 标志生成汇编代码(.s 文件)。通常,您永远不会看到程序集。

但 C++ 标准并没有强制要求编译器输出的最终形式,只是要求代码在运行时必须以某种方式运行。

事实上,最早的 C++“编译器”实际上是生成 C 源代码,然后对其进行编译。

如果您觉得自虐,您可以让您的 C++ 编译器生成目标代码、Java 字节码甚至 GWBASIC。

【讨论】:

  • 信息量很大,只是一个问题,如何将C++代码编译成Java字节码?
  • 嗯,你必须编写一个编译器来做到这一点。抱歉,我并不是说有编译器可以做到这一点,只是说编写一个既可行又符合标准。
  • MSVC 可以编译成 MSIL,在概念上类似于 Java 字节码。
  • @paxdliabo :-/ 我认为作为 C++ 程序员可以吹嘘! @MSalters 托管和非托管代码都转换为 MSIL?
  • @MSalters,MSIL 在概念上与 JVM 不相似——它允许不安全的指针算术,并且存在混合模式程序集。但是,当然可以将 C++ 编译到 JVM,当然会显着降低性能。
【解决方案2】:

这取决于编译器。 c++ 编译成的没有真正的规则,除非它应该能够在计算机上运行。大多数编译器都有编译到汇编的开关。

使用 gcc 你可以添加 -S 来编译成 .asm 文件。

对于视觉工作室,请参阅http://codegem.org/2008/10/generate-assembly-from-c-code-in-visual-studio

【讨论】:

  • 您的链接已失效。
【解决方案3】:

您的代码必须被机器理解,并且由于它不是在 VM 中解释或运行,它首先在汇编中转换。您可以通过在 g++ 编译选项中使用 -S 标志来获取此汇编代码(当然,只要您使用的是 g++)。

g++ -S -o file.s file.cpp

应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 2023-01-31
    • 2018-05-07
    • 2015-12-21
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多