编译原理

2019-03-14  本文已影响0人  吃面多放葱

什么是编译程序?

从功能上看,一个编译程序就是一个语言翻译程序.语言翻译程序是把一种语言(称作源语言)书写的程序翻译成另外一种语言(称作目标语言)的等价程序.

编译程序功能及高级源程序的处理过程

解释程序和编译程序的区别?

编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编语言程序或二进制代码程序,这个二进制代码程序在机器上运行以生成结果;
解释程序不需要在运行前先把源程序翻译成目标代码,也可以实现在某台机器上运行程序并生成结果.

解释程序接收某个语言的程序并立即运行这个源程序.它的工作模式是一个个的获取,分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员以交互方式工作的情况,即希望在获取下一个语句之前了解每个语句的执行结果,允许执行时修改程序. (如Shell解释程序,SQL解释程序)

运行时存储组织

目标程序在目标机环境中运行时,都置身于自己的一个运行时存储空间.
编译程序所产生的目标程序本身大小通常是确定的,一般存放在指定的专用存储区域,即代码区
相应地,目标程序运行过程中需要创建或访问的数据对象将存储在数据区,数据对象包括用户定义的各种类型的命名对象(如变量和常量),作为保留中间结果和传递参数的临时对象及调用过程时所需的连接信息等.

面向数据对象的运行时存储组织所关注的几个重要问题:

程序运行时存储空间的布局

运行时的存储空间从逻辑上可分为代码区数据区两个主要部分,一般情况下至少含有 保留地址区 代码区 静态数据区 动态数据区

存储分配策略
1.静态存储分配, 即在编译期间为数据对象分配存储空间.
2.栈式存储分配 内存地址由高到低
3.堆式存储分配 内存地址由低到高

面向对象语言存储分配策略

类和对象的角色

面向对象程序运行时的特征

对象的存储包含对象各个属性的存储以及方法索引表,
方法的动态绑定,是将当前实例方法对应的实例作为参数传进去(即self 或 this 指向的实例作为参数传给该方法 )

上一篇 下一篇

猜你喜欢

热点阅读