计算机应用研究论文优化程序长度的一种方法
期刊目录网计算机应用论文发表2016-04-21 11:19关注(1)
这篇计算机应用研究论文发表了优化程序长度的一种方法,论文分析了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技术为程序员提供了一种以少量增加运行时间代价而较方便地压缩执行文件长度的方法。它可通过简单地重编译而在程序中全局地使用,局部使用时将编译指示置于关键过程之前,可保证最大限度地压缩代码长度而使性能损失最小化。
推荐期刊:《中国计算机用户》现为《中国经济和信息化》,杂志是工业和信息化部主管的期刊,传播IT信息,挖掘用户需求、服务行业应用,关注工业化与信息化的深度融合,关注电子新经济的发展。
计算机应用研究论文优化程序长度的一种方法相关论文:
- 测控技术测绘技术论文发表核心期刊
- 系统仿真技术杂志国家级期刊征收论文格式核心期刊
- 电力电子技术电力工程论文核心期刊
- 电气电子教学学报电子科学论文核心期刊
- 广东电力电力工程师职称论文核心期刊
- 工程设计学报机电一体化论文核心期刊
- 光谱学与光谱分析光学论文发表核心期刊
- 电源学报电子技术论文发表核心期刊
- 热力发电杂志最新工程师论文查询核心期刊
- 《计算机研究与发展》核心电子期刊方式核心期刊
- 《计算机研究与发展》核心电子期刊方式
- 《计算机技术与发展》核心电子期刊
- 《计算机时代》电子核心论文期刊
- 计算机周刊杂志是什么级别刊物
- 自动化与信息工程杂志广东省科学院主管刊物
- 中国机电工业杂志论文字体要求
- 信息通信技术杂志是国家级期刊吗
- 今日电子杂志2017年7期论文目录查询
- 当代通信杂志通信工程师期刊
- 电力工程技术江苏电力期刊
- 工程科技是什么级别
- 名师在线是核心期刊吗
- 建设科技是核心期刊吗
- 比较教育研究是SCI期刊吗
- 临床肺科是什么级别
- 财会类期刊有哪些
- 幼教刊物有哪些
- 一个月见刊的期刊有哪些
- 林业方面的核心期刊有哪些
- 水产类核心期刊有哪些
- 湖北省高级工程师评审条件
- 一级播音员是什么职称
- 评职称承认通讯作者吗
- 副高级职称评审需要什么材料
- 河北省正高级职称评审条件
- 职称中的学术成果包含哪些
- 医师职称晋升的要求有哪些
- 电气工程师职称晋升的要求
- 期刊录用证明能评职称吗
- 初级职称升中级职称条件有哪些
- 论文状态with editor是什么意思
- 论文的作者和通讯作者有什么区别
- 论文字数太多会被退稿吗
- 论文审稿意见如何撰写
- 英文论文中常用的短语有哪些
- 审稿状态的终审已审回是什么意思
- scopus是哪个国家的
- 第一作者就是通讯者吗
- 论文添加作者理由模板有哪些
- 论文外审需要多久
- 学术论文的标准格式以及字号
- 论文盲审阶段被拒稿是什么原因
- sci论文的格式要求是什么
- 论文署名格式范例
- 文献综述可以直接抄原句吗
- 一般核心论文加急能成功吗
- 期刊论文字数不够怎么办
- 英文标题大小写规则
- cpci会议参会有参会证明吗
- 论文共同作者是什么意思