新闻详情

新闻详情

首页 / 资讯中心 / 详情

从源码到 CPU:详解 C++、Java、Python 的编译与执行机制

发布时间:2026/10/1 9:42:53来源:尧图网络
从源码到 CPU:详解 C++、Java、Python 的编译与执行机制
后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载本指南以 data/guides/how-do-c-java-python-work.md 为核心骨架结合仓库中 Javascript 执行原理、垃圾回收机制、程序运行流程 等文档系统讲解编译型、字节码型、解释型三类语言的执行模型。读完你将掌握 C、Java、Python 从源码到 CPU 执行的全链路差异理解 JITJust-In-Time编译器为何能缩短解释型与编译型的性能差距并能据此在不同业务场景下做出语言选型判断。引言同一份源码三种不同的翻译方式无论使用哪种编程语言源代码最终都必须被翻译成 CPU 能够理解的机器指令。差别在于翻译发生在什么时候、由谁完成、翻译的产物是什么。现代编程语言大致可以分为三类执行模型编译型Compiled编译器预先将源码整体翻译成机器码CPU 直接执行机器码。字节码型Bytecode / VM编译器先将源码翻译成与平台无关的字节码再由虚拟机如 JVM执行部分热点代码会通过 JIT 编译成机器码加速。解释型Interpreted不预先编译由解释器在运行时逐条解析并执行源码。关联文档指出Compiled languages in general run faster than interpreted languages编译型语言通常比解释型语言运行更快。这正是三类模型最直观的性能差异其根本原因在于翻译成本发生的时间点与执行时是否需要反复翻译。编译型语言C 的一次翻译永久执行核心流程编译器把源码编译成机器码 → 机器码由 CPU 直接执行。源代码 (hello.cpp) --编译器-- 目标文件 (.o) --链接器-- 可执行文件 --加载-- CPU 直接执行机器码关联文档给出的代表性编译型语言为C、C、Go。编译的完整链路以 C 为例编译并不是一步到位的通常包含四个阶段阶段输入 → 输出作用预处理Preprocessing.cpp→.i展开#include、处理#define宏编译Compilation.i→.s将源码翻译为汇编语言汇编Assembly.s→.o将汇编翻译为机器码目标文件链接Linking.o→ 可执行文件合并目标文件与库解析符号引用生成最终可执行文件对应的常见命令行以 GNU 工具链为例# 一步到位预处理 编译 汇编 链接 g hello.cpp -o hello # 分阶段观察 g -E hello.cpp -o hello.i # 只看预处理结果 g -S hello.cpp -o hello.s # 生成汇编代码 g -c hello.cpp -o hello.o # 只编译不链接生成目标文件 g hello.o -o hello # 单独链接为什么编译型语言快翻译只在构建期发生一次最终交付给 CPU 的是一份已经翻译好的机器码运行时没有额外的翻译开销。机器码直接可执行CPU 从内存中取指、解码、执行对应仓库 程序运行流程 中描述的 Von Neumann 架构——CPU 执行存储在内存中的指令无需中间层的解释开销。代价是平台绑定机器码与特定 CPU 架构绑定跨平台需要重新编译。字节码型语言Java 的编译一次处处运行核心流程源码先编译成字节码 → JVM 解释/执行字节码 → 必要时 JIT 编译成机器码。关联文档指出A bytecode language like Java, compiles the source code into bytecode first, then the JVM executes the program. Sometimes JIT (Just-In-Time) compiler compiles the source code into machine code to speed up the execution.代表性语言Java、C#。两级执行模型源代码 (Hello.java) --javac-- 字节码 (Hello.class) --JVM-- 机器码解释执行 或 JIT 编译编译阶段javac将.java源码编译为平台无关的.class字节码文件。运行阶段JVM 加载字节码。早期 JVM 以解释方式逐条执行字节码现代 JVM 会统计热点代码触发JIT 编译器将其编译为当前平台x86、ARM 等的机器码此后该段代码直接以机器码速度运行。# 编译与运行 javac Hello.java # 生成 Hello.class字节码 java Hello # JVM 加载并执行JIT 与 AOT 的取舍策略时机优点代价纯解释执行运行时启动快、跨平台每次执行都要翻译速度慢JIT 编译运行时热点代码编译后接近原生速度启动时需预热占用编译时间AOT 编译如 GraalVM Native Image构建期启动快、接近原生速度失去部分动态能力构建复杂JIT 之所以能既快又兼容在于它只在运行时针对当前平台生成机器码动态优化如方法内联、逃逸分析也让 JVM 在某些场景下超过传统的静态编译产物。字节码的运行成本不止于翻译虚拟机模型下运行时开销还包含自动内存管理。仓库的 垃圾回收机制 文档列出了 Java 的多种 GC 实现Serial GC适合单线程环境或小型应用Parallel GC又称吞吐量收集器适合批量任务CMSConcurrent Mark-Sweep低延迟取向尽量缩短停顿G1Garbage-First在吞吐量与延迟之间取得平衡是长期以来的默认选择ZGC面向大堆、极小停顿的低延迟收集器。这说明字节码 VM模型在获得跨平台与托管内存便利的同时需要持续投入 GC 调优、JIT 预热等工程手段来逼近原生性能。解释型语言Python 的边翻译边执行核心流程不预先编译解释器在运行时直接读取并执行源码。关联文档指出Interpreted languages are not compiled. They are interpreted by the interpreter during runtime.代表性语言Python、JavaScript、Ruby。运行时逐条执行源代码 (hello.py) --解释器(Python)-- 逐条解析、执行无独立机器码产物以 Python 为例python hello.py # 解释器直接运行源码解释器在每个运行时刻都在做读取一行 → 解析语法 → 执行的工作。因此翻译成本被分摊到每一次运行中这是解释型语言整体偏慢的根本原因。Python 其实也有字节码这一步严格来说CPython 并不直接对源码文本求值它会在内存中把源码编译成.pyc字节码缓存于__pycache__/再由 Python 虚拟机PVM逐条解释执行字节码。这既避免了重复解析语法的开销也保留了运行时解释执行的灵活性# 查看当前源码对应的字节码指令 import dis dis.dis(compile(a 1 2, test, exec))也就是说Python 是**编译到字节码 运行时解释字节码**的混合形态——只是它的编译器工作在运行前一刻产物不直接交付给 CPU。解释型语言并非永远慢仓库的 Javascript 执行原理 文档提供了一个典型反例Modern engines such as V8 utilize Just-In-Time (JIT) technology to compile code into directly executable machine code.经典解释器如早期 Python 实现逐条执行速度受限现代引擎V8、PyPy、Ruby 的 MJIT/YJIT 等采用JIT 编译先快速解释以收集运行信息profile再将热点代码编译为机器码并缓存复用从而大幅缩短与编译型语言的差距。因此编译型比解释型快这一结论的适用范围正在被现代 JIT 技术持续压缩——解释型语言的优势在于开发效率、动态性与跨平台便携性代价是运行时需要额外的翻译与优化开销。三类执行模型对比速览维度编译型C、C、Go字节码型Java、C#解释型Python、JavaScript、Ruby翻译产物机器码平台无关字节码无独立机器码产物或内存中字节码翻译时机构建期一次完成编译期产字节码 运行时 JIT运行时逐条翻译执行者CPU 直接执行JVM / CLR 执行热点 JIT 编译解释器逐条执行跨平台需按平台重新编译字节码跨平台需目标平台 VM天然跨平台依赖解释器实现启动速度快直接运行需 VM 启动 JIT 预热快无构建步骤运行速度通常最快接近原生热点编译后通常较慢JIT 后可改善典型场景系统软件、游戏引擎、高性能服务大型企业应用、Android、后端服务脚本、数据科学、Web 前端、快速原型结语选型不是单选题而是权衡题回到关联文档的结论——编译型语言一般比解释型语言运行更快——更准确的表述是在不同执行模型下翻译成本被分配到了不同的阶段追求极致运行性能与底层控制C 这类编译型语言仍是首选追求跨平台与高吞吐服务Java 这类字节码 JIT模型在成熟工程化后可以非常接近原生性能追求开发效率与动态灵活性Python、JavaScript 这类解释型语言用一部分运行时开销换来了更快的迭代速度并且现代 JIT 引擎正在持续缩小这条性能鸿沟。理解这三类模型的执行链路是评估为什么这段代码慢为什么这个语言启动快JVM 为什么要预热等问题的前提也是后续阅读 程序运行流程、Javascript 执行原理 与 垃圾回收机制 等深入主题的起点。赞分享后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载相关推荐Arduino IDE编译与上传机制从源码到硬件执行Arduino IDE编译与上传机制从源码到硬件执行 本文深入剖析了Arduino IDE的完整编译与上传机制涵盖了从源码编译到硬件执行的整个流程。文章详细开发工具IDE代码编辑器嵌入式OpenSpeedy编译教程从源码到可执行文件的CMake配置详解OpenSpeedy编译教程从源码到可执行文件的CMake配置详解 OpenSpeedy是一个开源免费的游戏加速工具通过CMake构建系统实现跨平台编译。本桌面应用游戏开发Slang CPU Target 实战指南从 Slang 到 C 的转译、Host-Callable 执行与 CPU ABI 全解析Slang CPU Target 实战指南从 Slang 到 C 的转译、Host Callable 执行与 CPU ABI 全解析 本文基于 Slang编译器图形学编程语言上一篇[7.0.1] - 2025-XX-XX下一篇Pippo集成指南如何与Guice、Spring等DI框架无缝集成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

浏览器AI抠图慢不慢,先看它跑在哪个后端 2026/10/1 10:23:05

浏览器AI抠图慢不慢,先看它跑在哪个后端

同事上周在群里吐槽我安利的网页抠图工具点一下要干等好几秒。我这边差不多是点完就出图。两台都是 Mac 上的 Chrome 打开同一个网页。我第一反应是他网不好,后来确认模型早就缓存过了、根本没在下载。真正的差别出在浏览器拿什么跑模型:一边走 WebGPU 用…

阅读更多 →
Oracle 11gR2 RAC OCR和votingdisk故障恢复案例 2026/10/1 10:23:04

Oracle 11gR2 RAC OCR和votingdisk故障恢复案例

ASM磁盘组冗余的三种类型:external、normal、high,这里恢复的是normal状态,模拟OCR磁盘或votedisk不可用时,RAC会出现什么现象?给出故障定位的整个过程。在11.2.0.3中表决盘是放到了ocr中,所以 OCR磁盘或votedisk不可用的两个实验…

阅读更多 →
地铁广告收费价格体系全解析:2026采购指南与比价攻略 2026/10/1 10:23:04

地铁广告收费价格体系全解析:2026采购指南与比价攻略

地铁作为城市核心公共交通场景,具备高客流、强沉浸、固定触达的传播特征,长期被品牌方视作线下品牌曝光、区域市场渗透的核心媒介。但传统地铁广告采购普遍存在报价不透明、渠道层级多、跨城市比价繁琐、上刊履约风险难管控等痛点。依托全国广告资源整合…

阅读更多 →
Astra 被搁置:Agent 侧怎么卡 scope、授权与行动披露 2026/10/1 10:22:58

Astra 被搁置:Agent 侧怎么卡 scope、授权与行动披露

本文面向正在搭建或运维 agent harness / tool-using coding agent 的软件与平台工程师。素材来自 2026-09-28 多家媒体对 OpenAI 搁置 GPT-6.1 Astra 发布计划的公开报道。文中严格区分「公开事实」与「作者架构建议」;不编造内部 eval 分数、官方安全计分卡或未公…

阅读更多 →
platform_bus_init / device_register / bus_register / device / of_platform_register_reconfig_notifier 2026/10/1 10:22:51

platform_bus_init / device_register / bus_register / device / of_platform_register_reconfig_notifier

platform_bus_init1. platform_bus_init 函数1.1 device_register 函数1.2 bus_register 函数1.3 of_platform_register_reconfig_notifier 函数1.4 device 结构体1. platform_bus_init 函数 通过early_platform_cleanup()函数,清理早期平台设备(将早期启…

阅读更多 →
XPath 选择器 2026/10/1 10:22:45

XPath 选择器

在上一篇名为《入门(基于)》的文章中, 当咱们讲解那个东西的入门知识的时候, 挖了好几个大坑, 其中一个就是这篇文章所讲的。在当今的Web自动化测试领域, XPath与CSS选择器的使用频率非常高。借助这两种工具, 测试人员能够非常准确地找到需要操作的页面元…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉