教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> 论文> 其他论文> 优化程序长度的一种方法

优化程序长度的一种方法

上传者:网友
|
翻新时间:2013-12-18

优化程序长度的一种方法

优化程序长度的一种方法 优化程序长度的一种方法 信息技术论文 更新:2006-4-8 阅读: 优化程序长度的一种方法 摘要: 本文分析了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函数。

3. P-CODE使用方法

P-CODE可用于Microsoft的Visual C++、Visual Basic等许多应用程序开发包中,它可全局地用于整个应用程序,也可通过使用“Pragmas”编译指示有选择地用于局部模块中。

3.1. 全局使用方法

当要求以部分速度代价来达到程序长度的显著减小时,可对应用程序全局地使用P-CODE编译。如主要用于用户界面的程序,象字处理器、电子日历、小型企业财务软件包等。

此使用方法比较简单,只要改变应用工程的编译选项,然后重新编译即可。例如在Visual C++工程中加上编译选项开关“/Oq”,或在Visual Basic工程属性的编译页帧中,选中“编译为P-代码”选项。

3.2. 局部使用方法

若要在程序的速度和长度性能上达到比较平衡的满意效果,可在Visual C++源文件中有选择性地加上P-CODE编译指示,具体地指示编译器将哪一段代码编译为P-CODE,而将哪一段代码编译为本地机器码格式。

P-CODE局部使用方法是将编译指示器“#Pragma Optimize(“q”,on)”置入想用P-CODE的模块或函数开始处,而在用P-CODE的模块或函数结束处加上编译指示器“#Pragma Optimize(“q”,off)”。

一般来说,要想达到比较满意的使用效果,就要将主要影响程序执行速度的模块或函数编译为本地机器码,如频繁调用的函数、出现在循环内的函数等。而将相对来说对程序的执行速度起次要作用、主要影响程序长度的模块或函数编译为P-CODE,如用户接口过程中的菜单和对话框模块,因为这里程序执行速度上的牺牲相对于用户的工作速度来说,是微不足道的。还有一些很少使用的模块或函数,如出错处理函数、一般情形下不会用到的功能模块也应编译为P-CODE。

4. P-CODE程序调试

用P-CODE编译的程序,可使用Microsoft提供的调试工具如CodeView调试器等来进行调试。它对源代码级和P-CODE汇编指令级二者都给予支持,所有正常的CodeView调试器命令,如BREAK、STEP、WATCH等在本地机器码和P-CODE码两种方式下都会起作用,只不过在P-CODE方式下,程序在断点暂停后,寄存器窗口显示的是堆栈和P-CODE工作引擎的状态。

因为P-CODE的引用会产生许多跳转指令,使得目标程序调试时难于阅读和跟踪,所以较好的策略是在程序开发调试阶段用编译开关“/Of_”关掉引用,当程序全部调试完毕后再打开引用优化编译开关。

5. P-CODE性能分析

P-CODE技术的本质是用程序执行时间的少量增加来换取其长度的明显减小。虽然P-CODE指令由工作引擎解释执行,固有地慢于CPU本地机器码的执行,但程序总体所需的执行时间还取决于一些系统因素和程序员使用P-CODE的技巧。在内存一定的环境中,大程序长度的减小也相应地减少了其执行时所需的内存容量,从而需要较少的虚拟内存交换页,且相应地提高了Cache命中率,因而减少了其运行时的系统开销,故其P-CODE版本和本地机器码版本最终在执行速度上的差异很小。另外,采用P-CODE后,程序长度减小了,系统总的吞吐率也得到了改善。

6. 结束语

Microsoft的P-CODE技术为程序员提供了一种以少量增加运行时间代价而较方便地压缩执行文件长度的方法。它可通过简单地重编译而在程序中全局地使用,局部使用时将编译指示置于关键过程之前,可保证最大限度地压缩代码长度而使性能损失最小化。

下载文档

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

网友最新关注

一次难忘的经历
七色花
漫画《父与子》——一本引人入胜的书
偷偷玩电脑
我受伤了
好孩子
小泥猪
手工制作
未来的火车
喝了聪明液以后
假如我有一双翅膀
文具袋
草莓
教室节的早晨
工程质量维修控制办法(物业管理)
《顾客投诉服务标准》
论如何做好当前信访工作
提高党的执政能力 切实加强领导班子和干部队伍建设
办公室要多培养领导人才
对“三个代表”重要思想的进一步认识
从西班牙事件解读中小企业面临的问题
创新——企业生存和发展的永恒主题(商场)
浅谈如何转变领导干部作风
新形势下如何开展反腐倡廉宣教工作
对某“检验中心”工作的初步设想
在区委中心组学习会上的发言
如何做好厂务公开工作
工作鉴定材料
公司经营机制(燃气公司)
妙悟的美学历程
关于情势变更原则(1)论文
浅析夫妻约定财产制(1)论文
美的本质探讨
对现状的思考和艺术家的责任
尼采的审美人生观
样板戏的艺术缺失
我国无独立请求权第三人制度的改革与完善(下)(1)论文
股东债权出资存在的问题与立法建议(1)论文
浅谈无效民事行为(1)论文
浅谈南北地缘美学对唐代诗歌的影响
法人的分类(1)论文
关于母子公司的基本认识及母公司滥用股权的思考(1)论文
中产阶层视野的民主与宪政
“草根民主”与农民理性
从生活中来 到生活中去──《影子》教学随笔
PPT动画课件《影子》的制作
玩中学 学中玩──《影子》教学案例
教学《影子》有感
疑是思之始,学之端──《影子》教学片断及反思
《影子》教学设计
读《影子》教学实录之后
《影子》词语造句
《影子》教学案例及反思
阳光·孩子·课堂──《影子》教学案例与评析
课堂·生活──《影子》教学案例及点评
《影子》教学片断赏析
使用一年级新课标教学体会
《影子》近义词反义词
自主识字,自得其乐──《影子》教学案例与反思