为什么 C/C++ 跨平台执行需要重新编译,而 Java 不需要?

张开发
2026/4/17 16:20:13 15 分钟阅读

分享文章

为什么 C/C++ 跨平台执行需要重新编译,而 Java 不需要?
前言文章最初版本发布时间2026-04-07 20:07文章最新版本发布时间2026-04-16 16:05最近在复习java看到了关于跨平台运行的知识对比着c/c深入的理解一下。为什么java代码在跨平台运行时不需要重新编译因为java代码编译出来后的.class是在jvm中运行的因此linux、windows、mac这些操作系统中只要安装了该操作系统对应的jvm然后拿到.class文件就可以运行了。为什么c/c代码跨平台执行需要重新编译首先不同的平台意味着对应的cpu机器指令集可能就不同比如小米的澎湃操作系统使用的是arm架构的cpuwindows操作系统使用的是x86架构的cpu这两个cpu架构不同机器指令集自然就不同了比如在arm架构中“加法指令”是数字52在x86架构中“加法指令”可能是数字25当然我这里只是举例不是说真的是这个值并且我这里为了方便人去阅读/理解使用了十进制实际在计算机中是使用的二进制这样的话编译器在编译c、c代码时要根据自己平台的“性子”进行编译其次不同的操作系统提供的系统调用接口也不同这个一定不同所以c语言代码在windows系统中最终编译后生成的机器码和linux、mac中生成的机器码都不同这样肯定需要重新编译了若不重新编译硬要执行的话当cpu在执行一条一条指令时突然看到了不属于自己指令集的指令比如我现在在arm架构中跑在x86架构中编译的c代码arm架构cpu在执行一条条指令时{执行指令时会有很多东西的参与比如cpu中的控制单元、各种寄存器典型的有PC…}在某条指令中看到了数字25这个原本是“加法指令”但是由于arm架构中加法指令是“52”这样的话就无法正确执行加法了至于会执行什么那得看arm架构中“52”代表什么了若52没有对应的指令那就直接卡死在那了。后记大篇幅叙述给到c/c了但是其实java那里也没什么可多说的...要硬说的话就得聊jvm了。

更多文章