计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

优化程序长度的一种方法毕业论文

2015-05-12 01:12
导读:计算机论文论文,优化程序长度的一种方法毕业论文应该怎么写,有什么格式要求,科教论文网提供的这篇文章是一个很好的范例: 摘要:本文分析了Microsoft公司优化

摘要:本文分析了Microsoft公司优化程序长度的P-CODE 技术的基本工作原理、P-CODE的使用方法以及P-CODE程序的性能。提出了P-CODE编译的程序调试时应注意的主要问题。

关键词:程序优化 代码压缩 P-CODE 编译指示器 程序调试

1. 前言

用户要求应用程序有更多更全的功能,使得应用程序的代码长度持续增长,但由于系统的开放性,有时也要求应用程序能在多种环境下运行,有很好的可移植性。这要限制应用程序的代码长度,减少其运行时所占的内存容量。

Microsoft公司为了满足此需求,在其应用程序开发包中引进了一种称为P-CODE(Packed Code, 压缩码)的代码压缩技术。此技术与本地机器无关,在大多数情况下,可把执行程序的长度减少大约40%,为程序员提供了一个灵活而又容易实现的解决方案,减少了应用程序对内存容量日益增长的需求。

2. P-CODE工作原理

P-CODE 的基本工作原理是编译器先把执行程序编译为比80X86机器码紧凑得多的中间代码形式,然后在链接时把一个小工作引擎嵌入执行程序中,最后在运行时由此工作引擎把P-CODE解释为本地机器码实际执行。为了方便使用,P-CODE技术实现于编译过程的代码生成阶段。例如开发者在C/C 中应用P-CODE技术时,只需把它作为一个“优化”选项选中即可

2.1. 指令格式

在应用P-CODE技术时,链接器会自动拷贝一份长度约为9K的P-CODE工作引擎到执行程序中,程序运行时它仿真一个虚拟处理器。

P-CODE技术能压缩执行程序代码长度的关键就在于工作引擎的指令格式。我们知道,在现代计算机的指令格式中,指令除指令码外,还包括指出源和目的操作数的地址码,真正的操作数一般放在内存和寄存器中。而一般常用的指令格式是二地址码结构,少量使用一地址码和零地址码结构。例如最简单的两个寄存器值相加汇编指令写为:ADD AX, BX; AX←(AX) (BX)

而P-CODE是一个独立于本地机器的虚拟指令系统,其工作引擎是一个基于堆栈的虚拟机,它的大多数指令中只有指令码,没有地址码部分,隐含操作数存储于系统堆栈中,因而远比本地机器指令紧凑。同样上述的工作,P-CODE就可简化为ADDW,它执行时从堆栈中弹出操作数,运算后的结果再压回堆栈中。如用80x86汇编指令表示,就等价于下列指令段:

POP AX ;弹出第一个操作数到AX寄存器中

POP BX ;弹出第二个操作数到BX寄存器中

ADD AX, BX ;把两数相加,结果存贮于AX寄存器中

PUSH AX ; 将AX寄存器中的结果压回堆栈中

2.2. 操作码长度

P-CODE引擎使用堆栈隐含寻址,使得其操作码长度平均小于2个字节,分为标准和扩展的操作码两大类。

标准操作码占用一个字节,由255条最常用的指令组成,扩展操作码由256条不太常用的指令组成。有统计表明,在一个全部编译为P-CODE的20万行的C程序中,一字节指令使用频率为56%,占代码长度比例为37%,二字节指令使用频率为39%,占代码长度比例为52%,而三或四字节指令占用了余下很小的百分比。

2.3. 引用

P-CODE技术优化执行程序长度的另一个重要特性是引用。引用就是编译器优化时,去掉代码段的重复现象,共享代码段的单个实例,类似于在高级语言中使用函数或过程的方法,当然它是编译器自动进行的。编译器优化时检查它所产生的代码,寻找指令段重复的地方,在程序中只保留重复段的一次出现,将所有其它出现的地方都改为指向保留段的一条跳转指令。此技术为执行程序长度压缩了大约5-10%的额外空间。

2.4. 本地入口点

使用P-CODE,在程序代码中有时也会产生额外的空间开销,这就是P-CODE函数前面的本地入口点。

当程序中局部使用P-CODE编译时,很可能会发生机器码函数调用P-CODE函数的情况。由于P-CODE指令段需由P-CODE引擎解释执行,这时就需要编译器在P-CODE函数开始处额外增加几条机器指令即本地入口点,以便机器转换控制,停止执行本地机器码而调用P-CODE引擎,由P-CODE引擎继续解释执行P-CODE函数。

上一篇:谈网络安全系统的构建毕业论文 下一篇:基于Mschart的数据库图表应用编程毕业论文