据我所知,c++ 代码由汇编代码组成,当我编译一个程序时,它被读取为等效的汇编代码,然后由编译器运行。我还了解到,程序集语法和功能因处理器模型而异。如果是这样,编译器如何设法编译程序而不被 bug 所困扰?我的意思是,编译器不可能保存每个创建的汇编语言变体,对吗?
最佳答案
我认为您混淆了汇编代码和机器代码。这是不一样的。机器代码是 CPU 执行的——指令和数据的字节流。汇编是机器代码的人类可读表示。
的确,所有 C++ 代码最终都会编译成机器码。是的,CPU 和 CPU 版本之间的指令集会发生变化。编译器有“目标架构”的概念——当你编译时,你可以选择指定一个。如果不这样做,通常会假定当前机器的体系结构。是的,编译器供应商必须努力支持他们打算支持的每一种 CPU。幸运的是,没有那么多。此外,在 C 编译过程中,代码生成甚至不是最复杂的步骤,因此大多数编译器自身的代码都不是 CPU 特定的。
一些编译器通过汇编工作——而不是生成机器代码,它们生成汇编并将其提供给汇编器以进行最后的编译阶段。通过这种设计,您的编译器通常会假定系统中存在某种汇编程序风格 - 通常是 GNU 汇编程序(as
)。
关于c++ - C++ 编译器使用什么类型的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918634/