gcc程序集与直接到机器代码

时间:2014-04-21 23:08:20

标签: gcc assembly compiler-construction

我最近开始学习如何编程,我发现这一件事很奇怪: 为什么gcc会更加努力地将c代码编译为汇编代码然后编译代码? 编译直接编译到机器代码是否合理?我知道,例如MS c编译器是这样做的,那么gcc的行为是什么原因呢?

2 个答案:

答案 0 :(得分:2)

因为有一件事,已经有汇编程序在将程序集转换为机器代码方面做得相当不错 - gcc重新实现该功能是没有意义的。 (还要记住,程序集仍然是/某种程度上/象征性的)
第二点,人们可能不会/总是/想要直接编译到机器代码 - 在嵌入式系统上,很有可能生成的程序集经过最后的手动优化。
最后但并非最不重要的是,它在调试编译器本身时非常有用,以防它出现异常。没有人喜欢阅读原始机器代码。

答案 1 :(得分:0)

GCC非常unix,这是unix方法,可以创建彼此构建而不是集成的单独工具。你需要有一个汇编器和链接器,汇编器的工作是为目标生成机器代码,没有意义重复。编译器的工作是将更高级别的语言归结为更低级别的语言。生成汇编语言可以更容易地调试编译器输出,并且它允许汇编器完成其工作而不是在两个地方重复任务。

当然不仅是unix编译器这样做,在所有平台上执行此操作都很有意义并且已经永远这样做了。直接到机器代码是例外而不是规则,通常是在有特定原因的情况下。

我不明白对这个问题的迷恋以及为什么一遍又一遍地问这个问题。请在询问之前搜索以前的答案...