我知道这是一个非常基本的问题,但是当我用 gcc/g++ 编译我的 c/c++ 代码时,在汇编器开始生成机器代码之前中间输出的类型到底是什么?是类似X86指令的东西吗?
GCC的处理链如下:
-
你的源代码
-
预处理的源代码(展开宏并包含,去除注释)(-E
, .ii
)
-
编译为程序集(-S
, .s
)
-
汇编为二进制(-c
, .o
)
-
链接到可执行文件
在每个阶段,我都列出了使进程停止的相关编译器标志,以及相应的文件后缀。
如果你编译-flto
,然后目标文件将用 GIMPLE 字节码进行修饰,GIMPLE 字节码是一种低级中间格式,其目的是将实际的最终编译延迟到链接阶段,从而允许链接时优化。
真正的“编译”阶段是实际的繁重工作部分。预处理器本质上是一个单独的、独立的工具(尽管它的行为是由 C 和 C++ 标准规定的),而汇编器和链接器是实际上分离的、独立的工具,它们基本上只是分别实现硬件的二进制指令格式和操作系统的可加载可执行格式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)