999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

使用P-CODE優化程序的長度

2009-06-25 02:20:52楊上熠
魅力中國 2009年7期
關鍵詞:引擎指令程序

楊上熠

中圖分類號:TP

文獻標識碼:A

文章編號:1673-0992(2009)03-0142-02

摘要:本文分析了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,它執行時從堆棧中彈出操作數。運算后的結果再壓回堆棧中。如用80×86匯編指令表示,就等價于下列指令段:

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的模塊或函數結束處加上編譯指示器“#Praona 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技術為程序員提供了一種以少量增加運行時間代價而較方便地壓縮執行文件長度的方法。它可通過簡單地重編譯而在程序中全局地使用,局部使用時將編譯指示置于關鍵過程之前,可保證最大限度地壓縮代碼長度而使性能損失最小化。

猜你喜歡
引擎指令程序
聽我指令:大催眠術
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
“程序猿”的生活什么樣
藍谷: “涉藍”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame開發
主站蜘蛛池模板: 色综合久久无码网| 一本色道久久88综合日韩精品| 六月婷婷精品视频在线观看| 久久久91人妻无码精品蜜桃HD| 欧美综合成人| 黄色网址免费在线| 免费一级α片在线观看| 中文毛片无遮挡播放免费| 呦视频在线一区二区三区| 国产精品密蕾丝视频| 制服丝袜 91视频| 国产精品亚洲一区二区三区在线观看| 91色在线观看| 99热这里只有精品国产99| AV网站中文| 亚洲国产日韩视频观看| 97av视频在线观看| 91成人免费观看| 熟女视频91| 亚洲一区二区三区麻豆| 亚洲有码在线播放| 日本国产一区在线观看| 在线观看av永久| 国产精品极品美女自在线| 日韩成人在线一区二区| 97国内精品久久久久不卡| 国产精品成人久久| 久草美女视频| 又黄又爽视频好爽视频| 久久综合激情网| 精品无码一区二区在线观看| 青青网在线国产| 亚洲国产精品无码AV| 免费观看三级毛片| 久久国产高潮流白浆免费观看| 国产农村精品一级毛片视频| 国产一二视频| 亚洲精品无码专区在线观看 | 亚洲区第一页| 最新日韩AV网址在线观看| 女同久久精品国产99国| 精品一区二区无码av| 免费在线播放毛片| 国产欧美在线观看精品一区污| 亚洲aⅴ天堂| 亚洲天堂区| 日韩不卡免费视频| 国产亚洲欧美在线专区| 激情在线网| 国产精品一区二区在线播放| www.狠狠| 成年人福利视频| 日韩精品一区二区三区大桥未久| 精久久久久无码区中文字幕| 欧美日韩导航| 欧美日韩精品在线播放| 欧美日韩激情在线| 日韩久久精品无码aV| 女人av社区男人的天堂| 波多野结衣一区二区三视频| 亚洲婷婷丁香| 91在线一9|永久视频在线| 亚洲永久视频| 狠狠v日韩v欧美v| 青青草国产在线视频| 五月综合色婷婷| 午夜色综合| 欧美特级AAAAAA视频免费观看| 青青草国产免费国产| 国产精品片在线观看手机版| 日韩在线1| 无码精油按摩潮喷在线播放| 久久精品亚洲热综合一区二区| 欧美一区福利| 狼友视频国产精品首页| 91成人精品视频| 久久综合婷婷| 国产欧美日韩综合一区在线播放| 国产在线97| 欧美日韩国产成人高清视频| 天天综合网亚洲网站| 亚洲综合色区在线播放2019|