【发布时间】:2019-06-16 20:44:24
【问题描述】:
C 语言最终被编译成机器特定的汇编语言。那么,如果每个处理器都有自己的汇编语言语法,C 怎么可能是跨平台的呢?如果我用 C 语言编写一个操作系统内核,那么我怎样才能让它在各种处理器上运行呢?
【问题讨论】:
-
通过为不同的处理器/平台编译 C 代码。您可以使用相同的 C 代码并为 x86、ARM 等编译它。当然,一个特定的编译二进制文件不会神奇地在不同的架构上运行,但这不是“跨平台”的意思。
-
您希望操作系统内核如何在不同的处理器上运行? 因为操作系统的核心组件需要不同的处理器。
-
我认为“可移植”一词与 C 本身一起使用的比“跨平台”更多,这意味着您可以将 C 源重新编译/移植到其他平台。然后有 C 的跨平台库,这意味着他们处理平台细节(通常以#ifdef ...方式,包括替换功能/API的平台特定部分)以使库API在所有平台上都相同,但仍然是针对特定目标进行编译的步骤必须存在(某些平台允许“胖”二进制文件包含用于不同架构的多个可执行文件,但这些就像不同的构建连接
-
对于操作系统内核,情况更具体,因为操作系统内核的机器代码很大程度上取决于平台细节,所以可以肯定的是,只有内核的通用部分是用纯 C 编写的,而且很可能有一些一小块平台特定的程序集支持内核,具有上下文切换、内存单元管理等专门任务……这完全是特定于平台的。
-
所有 C 代码都不可移植。如果您编写操作系统,与特定 CPU 通信的最低级别的硬件是不可移植的。只有它上面的抽象层。驱动程序等也是如此。
标签: c assembly operating-system cross-platform