当前位置: 首页 > article >正文

代码生成- 引言

 

代码生成的任务

负责把源程序翻译成“目标机器”上的代码,目标机器可以是真实物理机器(X86,ARM,MIPS等),也可以是虚拟机(JVM等)

两个重要任务:

  • 给源程序的数据分配计算资源
  • 给源程序的代码选择合适的指令来实现

1、给数据分配计算资源

源程序的数据:全局变量、局部变量、动态分配等

机器计算资源寄存器、数据区、代码区、栈区、堆区

根据程序的特点和编译器的设计目标,合理的为数据分配计算资源

例如,变量是放在内存里还是 寄存器 里?

2、给源程序的代码选择合适的机器指令

源程序的代码:表达式运算、语句、函数等

机器指令:算数运算、比较、跳转、函数调用返回

用机器指令实现高层代码的语义

  • 等价性    源语言上S做的事情,要和目标语言上n条指令合起来所做的工作应该是完全一样的(此处的完全一样是指外部表现行为)
  • 对机器指令集体系结构(ISA)的熟悉

 


http://www.kler.cn/a/6244.html

相关文章:

  • Hive其十,优化和数据倾斜
  • Linux中sh脚本发邮件配置
  • QT 控件定义为智能指针引发的bug
  • jenkins集成工具(一)部署php项目
  • C 实现植物大战僵尸(一)
  • 【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训
  • 编译报错pcl_conversions、及pcl_rosConfig解决方法
  • 位图和布隆过滤器
  • 4.3---Spring框架之Spring中bean的注入方式---(深入版本)
  • 免费CDN-CloudFlare的使用教程
  • STM32个人笔记-I2S
  • Git操作之 git add 撤销、git commit 撤销
  • 原神服务器架设教程(服务器命令代码)
  • C++相关面试题总结一——内存、关键字、STL、指针、排序、Lambda
  • 【iOS】—— 类和对象底层探索
  • SpringBoot国际化配置
  • 通过 NFTScan 追踪 NFT 钻石手持仓
  • mysql binlog 一直追加写,磁盘满了怎么办?
  • Win11启用IE方法
  • 超详细WindowsJDK1.8与JDK11版本切换教程
  • PCB模块化设计11——VGA高速PCB布局布线设计规范
  • nanovg绘图库的编译与使用
  • 【Python】数据容器--列表常用方法
  • 23种Java设计模式知识要点
  • (1)深入解析图像字幕生成数据集———Coco dataset
  • Scala的数组,元组,列表,集,映射(Map),迭代器(iterator)