深入 C 语言和程序运行原理
于航
PayPal 技术专家
21121 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
深入 C 语言和程序运行原理
15
15
1.0x
00:00/00:00
登录|注册

大咖助阵|海纳:C 语言是如何编译执行的?(三)

ELF格式 (Linux)
PE格式 (Windows)
aarch64指令集
x86指令集
LLVM IR
静态单赋值
三地址码
switch-case
循环语句
JUMP
JUMP_IF_FALSE
COMPARE
PRINT
BINARY_ADD
LOAD_NAME
STORE_NAME
LOAD_CONST
JUMP
JUMP_IF_FALSE
COMPARE
PRINT
BINARY_ADD
LOAD_NAME
STORE_NAME
LOAD_CONST
平台差异屏蔽
指令集执行
基于栈的计算模型
Python pyc文件
Java class文件
跨平台特性
可执行程序生成
机器码翻译
优化
中间表示 (IR)
抽象语法树 (AST)
文法分析
词法分析
Python虚拟机和Java虚拟机实现
虚拟机结构
字节码指令简洁性
重定位过程
AST转换成字节码
指令执行
栈操作
循环取出字节码
字节码生成程序
AST后序遍历
后缀表达式求值
虚拟机
字节码
后端
中端
前端
总结
虚拟机的实现
生成字节码
字节码和虚拟机
编译器组成
编译执行C语言

该思维导图由 AI 生成,仅供参考

你好,我是海纳。今天是“C 语言是如何编译执行的?”这一加餐系列的最后一讲。
一个编译器通常分为前端、中端和后端三个典型模块。前端主要包括词法分析和文法分析两个步骤,它的作用是把源文件转换成抽象语法树(Abstract Syntax Tree, AST)。在前面两期加餐中,我讲解了预处理、词法分析、文法分析的编译过程基本步骤,带你实现了一个小型 C 语言编译器前端。它将源代码翻译成了 AST,而且支持了变量定义和赋值,if 语句和 while 语句。
中端则主要是将 AST 转成中间表示(Intermediate Representation, IR),常见的中间表示有三地址码、基于图的静态单赋值表示等等,例如 LLVM IR 就是最常见的一种中间表示。编译器的优化主要集中在中端。
而后端的作用是将中间表示翻译成目标平台的机器码,并生成相应平台的可执行程序。机器码是由 CPU 指令集决定的,例如 x86 平台就要使用 x86 指令集,而 arm64 平台就应该使用 aarch64 指令集。华为的鲲鹏平台也是采用了 aarch64 指令集。可执行程序的格式则是由操作系统决定,例如在 Windows 系统上,可执行程序是 PE 格式的,exe 文件或者 dll 文件都是 PE 格式;而 Linux 系统上,可执行程序则是 ELF 文件。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

基于栈的字节码和虚拟机执行模型在编程语言中扮演着重要角色。本文深入介绍了编译器模块的作用和中间表示的重要性,详细阐述了字节码和虚拟机的概念,以及Java和Python字节码的特点和应用。通过展示Python代码和对应的字节码指令,解释了基于栈的计算模型的执行过程和字节码指令的作用。文章强调了基于栈的字节码的简单实现和虚拟机的跨平台特性,以及如何从AST生成基于栈的字节码。总体而言,本文通过简洁清晰的语言,帮助读者快速了解了基于栈的字节码和虚拟机的执行模型,以及其在编程语言中的应用和优势。文章还介绍了虚拟机的实现和执行模型,以及将AST转换成字节码的过程。最后,展示了一个真实的虚拟机例子,强调了编译器设计的复杂性和希望在未来能够带领读者实现一个完整的编译器。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入 C 语言和程序运行原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 一个工匠
    悟了,感谢🙏
    2022-04-02
    1
  • anqi
    强赞!
    2022-05-25
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部