gpt4 book ai didi

c - C代码如何在不同的处理器上运行?

转载 作者:太空狗 更新时间:2023-10-29 17:00:15 24 4
gpt4 key购买 nike

据我了解,C 代码在某人的机器上被编译为机器(汇编)代码,并成为一个 exe 文件,可以在许多不同的处理器(机器)上运行。但是由于不同的处理器都有自己独特的汇编代码,这些代码如何运行呢?编译后的exe不是只能在一种处理器上运行吗?

最佳答案

当您将程序编译为机器代码时,您必须选择机器代码指令集,可能是运行机器的模式(如果适用),以及结果代码的存储格式。

所有这些选择都限制了可以执行代码的目标平台。

  • 指令集在很大程度上取决于 CPU 的类型:x86(“IBM 兼容”)、PowerPC、ARM、MIPS、DEC Alpha、摩托罗拉 68k……在每个 CPU 系列中,都有许多子-可供选择的功能和版本(例如,对于 x86,有 i386、SSE、AVX 等)。较新的 CPU 可能能够执行仅限于老一代的代码,因此可能存在一个共同的子集。

  • x86 上的处理器模式取决于环境:MS-DOS 程序和启动时运行的任何程序的实模式、保护模式、不同的寻址模式在某些情况下可能可用(虚幻模式)。 .

  • 二进制格式需要被操作系统识别,或者更一般地说,被您拥有的任何加载机制识别:Windows 的 PE,现代 Linux 的 ELF,过去的 a.out,... An操作系统可能会为多种二进制格式提供加载程序。

这只是您在编译时选择的最基本级别的平台参数,您的程序只会在同意该选择的平台上运行。然而,现实世界的程序还有更多实际限制,例如 OS 系统接口(interface)和框架库的可用性,这些也需要匹配。例如,虽然在 Linux 中读取和运行 Windows PE 二进制文件并不难,但其中包含的代码在 Linux 上没有意义,因为它使用特定于 Windows 的软件中断。然而,通过截取和翻译它们,很可能在 Linux 上运行这些二进制文件。

关于c - C代码如何在不同的处理器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35598047/

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