您现在的位置: 论文网 >> 计算机论文 >> 计算机理论论文 >> 优化程序长度的一种方法论文

优化程序长度的一种方法

作者:佚名
出处:论文网
时间:2006-05-17
摘要:本文分析了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函数。

 [1] [2] 下一页

论文搜索
关键字:程序优化 代码压缩 P-CODE 编译指示器 程序调试
最新计算机理论论文
浅析高校计算机基础教学现状及应对策略研究
新时期电子信息技术发展现状与趋势分析
浅谈中职学校计算机理论课程教学的改革
定性仿真理论及其应用
新世纪的软件产业与集成电路产业
关于计算机普及教育的几个问题
IT市场初长成
中国计算机业的企业和政策
美国政府在计算机技术发展中的作用及其启示
学习化环境和师资培训
热门计算机理论论文
关于计算机普及教育的几个问题
基于信息技术的研究性学习
中国计算机业的企业和政策
谈谈提高输入数据正确性的方法
未来计算机与计算机技术
Visual C++与Delphi/C++Builder之比较及未来
VB编程中网格控件的选用及使用方法
基于Web的多媒体CAI课件开发过程中若干问题
WebQuest在高中研究性学习中的应用
关于土地信息系统建立过程中的数据质量问题