为什么C平台依赖?

时间:2013-08-11 11:10:38

标签: c

为什么必须为每个架构重新编译C?这不是最终的比特和字节,无论如何加载和跳转?每个架构是否基本上都以相同的方式通过最基本的命令?

5 个答案:

答案 0 :(得分:11)

  1. 不同的CPU具有不同的指令体系结构(例如,x86与ARM)。
    • 早期的Mac使用摩托罗拉68k架构;后来使用PowerPC;后来还使用了x86。在每次转换期间,开发人员必须将其可执行文件发送为fat binaries,其中包含两种体系结构的对象代码。
  2. 当前的x86 CPU具有32位和64位模式。
    • 这就是为什么你有32位和64位版本的Windows,Ubuntu等。
  3. 不同的操作系统提供不同的系统调用,库等。
    • 不同的OS 版本也可以提供不同的系统调用,库等(尽管OS供应商的目标是尽可能向后兼容)。
  4. 即使在同一操作系统上,不同编译器之间的调用约定也不保证是相同的。
    • 即使在同一操作系统上,也可能使用不同的可执行文件格式。例如,在许多Unix系统上,a.out曾经是使用的格式,但大多数最终切换到ELF。在过渡期间,必须以两种格式提供图书馆。

答案 1 :(得分:2)

  

每个架构是否基本上都以相同的方式完成最基本的命令?

大部分时间。但这些基本命令不同representedimplemented。 C编译器负责确保使用正确的表示和实现。

答案 2 :(得分:2)

是的,但所有这些负载和跳跃等在不同平台上看起来都不同。每个CPU系列都有自己的命令集。

在更高层次上,如果我们拥有相同的硬件但操作系统不同(例如Linux / Windows),我们会有不同的库,不同的可执行文件格式等等。

所有这些都是编译器和链接器必须遵守的。

答案 3 :(得分:1)

但每台机器都有自己的instruction set

答案 4 :(得分:0)

每个尝试抽象一些功能,就像每种语言一样,需要调整到具体的架构,或者创建一个可以运行它的虚拟机(对于每个架构)。