c++ - gcc/g++ 输出类型

标签 c++ c gcc

我知道这是一个非常基本的问题,但是当我用 gcc/g++ 编译我的 c/c++ 代码时,在汇编程序开始生成机器代码之前,中间输出的类型到底是什么?它是类似于 X86 指令的东西吗?

最佳答案

GCC的处理链如下:

  1. 你的源代码

  2. 预处理后的源代码(扩展宏和包含,去除注释)(-E, .ii)

  3. 编译成汇编(-S, .s)

  4. 汇编成二进制(-c, .o)

  5. 链接到可执行文件

在每个阶段,我都列出了使进程停在那里的相关编译器标志,以及相应的文件后缀。

如果使用-flto编译,目标文件会被修饰为GIMPLE字节码,它是一种低级中间格式,目的是延迟实际最终编译到链接阶段,允许链接时间优化。

真正的“编译”阶段是真正繁重的部分。预处理器本质上是一个单独的、独立的工具(尽管它的行为是由 C 和 C++ 标准规定的),而汇编器和链接器实际上是独立的、独立的工具,基本上只是分别实现硬件的二进制指令格式和操作系统的可加载可执行格式。

关于c++ - gcc/g++ 输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243994/

相关文章:

c++ - 未捕获的 std::exception 在核心中不正确的堆栈跟踪

c - 在 C 中获取 union 成员的地址是否合法?

debugging - 如何让gdb一起打印两个源代码对应的反汇编代码?

c++ - 关于c++函数重载的困惑

c++ - 带有 3 个选项的 C++ 中的 elsif 指令

c - 这个 for 循环会无限运行吗?

c - 通用快速排序由于某种原因不起作用

gcc - Oracle Linux 中的 Valgrind 安装错误

linux - 加载多个不同版本的共享库

c++ - C++ 中 string::substr() 的运行时间是多少?