我在这篇文章中积累了三个不同但背景相似的问题。以下相同。
- 从源 -> 可执行的步骤序列
- 32/64 位版本的编译器
- c 数据类型大小对编译器的依赖性
Q1:从源代码->可执行的步骤顺序
我认为以下是从源文件生成可执行文件的步骤
- 编写的源文件是用任何高级/中级语言编写的,并由编译器进行预处理。
- 当我们使用GCC/G++时,gcc -save-temps -c同时生成一个.S 和一个 .O文件,它们分别是程序集(可读)和目标代码(非人类可读)。
- 最后阶段是这个目标代码被链接以解析未知符号以创建机器(或)可执行代码。
所以这里的问题是这些假设对吗?我经常看到术语对象和机器代码可以互换使用。两者之间的确切区别是什么。?
Q2:32/64 位版本的编译器
在 Q1 的上述步骤中,编译器类型的影响究竟在哪里。是不是生成的汇编代码被改变了?
Q3:c 数据类型大小对编译器的依赖性
就 c 编程而言,数据类型的大小取决于编译器类型(或)硬件类型。请详细说明这些因素的依赖关系。尽管我在堆栈溢出中看到了与 Q3 的一些讨论,但我仍然对此感到困惑。