gpt4 book ai didi

c - 为什么编译的 C 程序依赖于操作系统

转载 作者:行者123 更新时间:2023-11-30 17:12:44 24 4
gpt4 key购买 nike

我了解到c编译器将高级c代码翻译为机器级代码,这是根据底层处理器的指令编码,这使得编译代码依赖于处理器。这是我的理解。但为什么这个编译的 C 程序是依赖于操作系统的。我的问题是为什么两台具有相似处理器(相同指令编码)和不同操作系统的机器不能运行相同的编译后的 c 文件,在其中任何一台上编译。我知道LINUX不能运行WINDOWS的.exe,反之亦然,每个操作系统都有不同的系统调用机制,但这些是操作系统级别的东西,为什么这些东西使得机器级别(指令级别)编译文件依赖于它们。
请帮助我..

最佳答案

编译后的机器代码本身确实可以在同一架构上运行的所有操作系统上执行(假设二进制文件本身的格式与每个操作系统兼容,但它们通常不是这样的 - 可执行文件不仅仅是一个接一个的指令,因此您已经很难让每个操作系统读取您的机器代码)。

但是,不使用特定于操作系统的调用的程序除了占用处理器周期之外还能完成什么?例如,如果没有特定于操作系统的调用(例如,您将如何执行 mallocfopen 或任何 I/O),则无法实现 C 标准库。因此,可移植程序不能使用任何库函数,并且操作系统几乎肯定会阻止它直接访问硬件或属于其他程序的内存(像 DOS 这样的简单操作系统可能是一个异常(exception))。

关于c - 为什么编译的 C 程序依赖于操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31326475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com