编译器简介

只谈情不闲聊 提交于 2020-03-03 16:47:54

语言处理系统

高级语言->汇编语言->机器码->硬件
在这里插入图片描述
预处理器:将源程序的存放在不同文件中的多个模块聚合起来,并替换宏。
汇编器:将编译器形成的汇编语言程序输出转换成可重定位的机器码。
编译器是一个程序,它可以将 高级编程语言编写的程序 翻译成目标语言(如机器语言)编写的程序。
解释器也是一个程序,但它不是翻译,而是直接根据用户的输入来执行制定的操作。
java就是编译器和解释器(虚拟机)的结合,实现一次编译,到处运行。Javac 的编译,编译 Java 源码生成“.class”文件里面实际是字节码,而不是可以直接执行的机器码。Java通过字节码和 Java 虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是实现“一次编译,到处执行”的基础。
链接器:大型程序会分成多部分编译,一个文件中的代码可能指向另一文件中的位置。链接器可以解决外部内存地址的问题。
加载器:把所有可执行文件放在内存中执行。

可重定位

程序内使用的是逻辑地址,在系统加载程序,给出物理地址时,才会把逻辑地址转换为物理地址,这就是可重定位。即将逻辑地址重新定位成物理地址。

  1. 静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。
  2. 动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时 由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址。动态重定位需要软件和硬件相互配合完成。

编译器的结构

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!