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

时间:2015-07-09 19:22:17

标签: c linux operating-system

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

1 个答案:

答案 0 :(得分:0)

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

然而,除了占用处理器周期之外,没有特定于OS的调用的程序可以实现什么呢?例如,如果没有特定于操作系统的调用,则无法实现C标准库(例如,您将如何执行mallocfopen,或实际上任何I / O)。因此,便携式程序无法使用任何库函数,操作系统几乎肯定会阻止它直接访问硬件或属于其他程序的内存(像DOS这样的简单操作系统可能是个例外)。