亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        使用P-CODE優(yōu)化程序的長(zhǎng)度

        2009-06-25 02:20:52楊上熠
        魅力中國(guó) 2009年7期
        關(guān)鍵詞:編譯器堆棧寄存器

        楊上熠

        中圖分類號(hào):TP

        文獻(xiàn)標(biāo)識(shí)碼:A

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

        摘要:本文分析了Microsoft公司優(yōu)化程序長(zhǎng)度的P—CODE技術(shù)的基本工作原理、P—CODE的使用方法以及P—CODE程序的性能,提出了P—CODE編譯的程序調(diào)試時(shí)應(yīng)注意的主要問(wèn)題,

        關(guān)鍵詞:程序優(yōu)化代碼壓縮P-CODE程序調(diào)試

        1、前言

        用戶要求應(yīng)用程序有更多更全的功能,使得應(yīng)用程序的代碼長(zhǎng)度持續(xù)增長(zhǎng),但由于系統(tǒng)的開放性。有時(shí)也要求應(yīng)用程序能在多種環(huán)境下運(yùn)行,有很好的可移植性。這要限制應(yīng)用程序的代碼長(zhǎng)度,減少其運(yùn)行時(shí)所占的內(nèi)存容量。

        Microsoft公司為了滿足此需求,在其應(yīng)用程序開發(fā)包中引進(jìn)了一種稱為P-CODE(Packed Code,壓縮碼)的代碼壓縮技術(shù)。此技術(shù)與本地機(jī)器無(wú)關(guān),在大多數(shù)情況下,可把執(zhí)行程序的長(zhǎng)度減少大約40%,為程序員提供了一個(gè)靈活而又容易實(shí)現(xiàn)的解決方案,減少了應(yīng)用程序?qū)?nèi)存容量日益增長(zhǎng)的需求。

        2、P-CODE工作原理

        P-CODE的基本工作原理是編譯器先把執(zhí)行程序編譯為比80X86機(jī)器碼緊湊得多的中間代碼形式,然后在鏈接時(shí)把一個(gè)小工作引擎嵌入執(zhí)行程序中,最后在運(yùn)行時(shí)由此工作引擎把p-CODE解釋為本地機(jī)器碼實(shí)際執(zhí)行。為了方便使用,P-CODE技術(shù)實(shí)現(xiàn)于編譯過(guò)程的代碼生成階段。例如開發(fā)者在C/C++中應(yīng)用p-CODE技術(shù)時(shí),只需把它作為一個(gè)“優(yōu)化”選項(xiàng)選中即可

        2.1.指令格式

        在應(yīng)用P-CODE技術(shù)時(shí),鏈接器會(huì)自動(dòng)拷貝一份長(zhǎng)度約為9K的P-CODE工作引擎到執(zhí)行程序中,程序運(yùn)行時(shí)它仿真一個(gè)虛擬處理器。

        P-CODE技術(shù)能壓縮執(zhí)行程序代碼長(zhǎng)度的關(guān)鍵就在于工作引擎的指令格式。我們知道。在現(xiàn)代計(jì)算機(jī)的指令格式中,指令除指令碼外,還包括指出源和目的操作數(shù)的地址碼。真正的操作數(shù)一般放在內(nèi)存和寄存器中。而一般常用的指令格式是二地址碼結(jié)構(gòu),少量使用一地址碼和零地址碼結(jié)構(gòu)。例如最簡(jiǎn)單的兩個(gè)寄存器值相加匯編指令寫為:ADD AX,BX;AX←(AX)+(BX)。而p-CODE是一個(gè)獨(dú)立于本地機(jī)器的虛擬指令系統(tǒng),其工作引擎是一個(gè)基于堆棧的虛擬機(jī),它的大多數(shù)指令中只有指令碼,沒(méi)有地址碼部分,隱含操作數(shù)存儲(chǔ)于系統(tǒng)堆棧中,因而遠(yuǎn)比本地機(jī)器指令緊湊。同樣上述的工作,P-CODE就可簡(jiǎn)化為ADDW,它執(zhí)行時(shí)從堆棧中彈出操作數(shù)。運(yùn)算后的結(jié)果再壓回堆棧中。如用80×86匯編指令表示,就等價(jià)于下列指令段:

        POP AX:彈出第一個(gè)操作數(shù)到AX寄存器中

        POP BX:彈出第二個(gè)操作數(shù)到BX寄存器中

        ADD AX。BX;把兩數(shù)相加,結(jié)果存貯于AX寄存器中

        PUSH AX:將AX寄存器中的結(jié)果壓回堆棧中

        2.2.操作碼長(zhǎng)度

        P-CODE引擎使用堆棧隱含尋址。使得其操作碼長(zhǎng)度平均小于2個(gè)字節(jié),分為標(biāo)準(zhǔn)和擴(kuò)展的操作碼兩大類。

        標(biāo)準(zhǔn)操作碼占用一個(gè)字節(jié),由255條最常用的指令組成,擴(kuò)展操作碼由256條不太常用的指令組成。有統(tǒng)計(jì)表明,在一個(gè)全部編譯為P-CODE的20萬(wàn)行的C程序中,一字節(jié)指令使用頻率為56%,占代碼長(zhǎng)度比例為37%,二字節(jié)指令使用頻率為39%,占代碼長(zhǎng)度比例為52%。而三或四字節(jié)指令占用了余下很小的百分比,

        2.3.引用

        P-CODE技術(shù)優(yōu)化執(zhí)行程序長(zhǎng)度的另一個(gè)重要特性是引用。引用就是編譯器優(yōu)化時(shí)。去掉代碼段的重復(fù)現(xiàn)象,共享代碼段的單個(gè)實(shí)例,類似于在高級(jí)語(yǔ)言中使用函數(shù)或過(guò)程的方法,當(dāng)然它是編譯器自動(dòng)進(jìn)行的。編譯器優(yōu)化時(shí)檢查它所產(chǎn)生的代碼,尋找指令段重復(fù)的地方,在程序中只保留重復(fù)段的一次出現(xiàn),將所有其它出現(xiàn)的±世方都改為指向保留段的一條跳轉(zhuǎn)指令。此技術(shù)為執(zhí)行程序長(zhǎng)度壓縮了大約5-10%的額外空間。

        2.4.本地入口點(diǎn)

        使用P-CODE,在程序代碼中有時(shí)也會(huì)產(chǎn)生額外的空間開銷,這就是P-CODE函數(shù)前面的本地人口點(diǎn)。

        當(dāng)程序中局部使用P-CODE編譯時(shí),很可能會(huì)發(fā)生機(jī)器碼函數(shù)調(diào)用p-CODE函數(shù)的情況。由于P-CODE指令段需由P-CODE引擎解釋執(zhí)行,這時(shí)就需要編譯器在P-CODE函數(shù)開始處額外增加幾條機(jī)器指令即本地入口點(diǎn),以便機(jī)器轉(zhuǎn)換控制,停止執(zhí)行本地機(jī)器碼而調(diào)用P-CODE引擎,由P-CODE引擎繼續(xù)解釋執(zhí)行P-CODE函效。

        3、P-CODE使用方法

        P-CODE可用于Microsoft的Visual C++、Visual Basic等許多應(yīng)用程序開發(fā)包中。它可全局地用于整個(gè)應(yīng)用程序,也可通過(guò)使用“Pragmas”編譯指示有選擇地用于局部模塊中。

        3.1.全局使用方法

        當(dāng)要求以部分速度代價(jià)來(lái)達(dá)到程序長(zhǎng)度的顯著減小時(shí),可對(duì)應(yīng)用程序全局地使用P-CODE編譯。如主要用于用戶界面的程序,象字處理器、電子日歷、小型企業(yè)財(cái)務(wù)軟件包等。

        此使用方法比較簡(jiǎn)單,只要改變應(yīng)用工程的編譯選項(xiàng),然后重新編譯即可。例如在Visual C++工程中加上編譯選項(xiàng)開關(guān)“/Oq”,或在Visual Basic工程屬性的編譯頁(yè)幀中,選中“編譯為p-代碼”選項(xiàng)。

        3.2.局部使用方法

        若要在程序的速度和長(zhǎng)度性能上達(dá)到比較平衡的滿意效果,可在Visual C++源文件中有選擇性地加上P-CODE編譯指示,具體地指示編譯器將哪一段代碼編譯為P-CODE,而將哪一段代碼編譯為本地機(jī)器碼格式。

        P-CODE局部使用方法是將編譯指示器“#Pragma Optimize(“q”,on)”置入想用P-CODE的模塊或函數(shù)開始處,而在用P-CODE的模塊或函數(shù)結(jié)束處加上編譯指示器“#Praona Optimize(“q”,off)”。

        一般來(lái)說(shuō),要想達(dá)到比較滿意的使用效果,就要將主要影響程序執(zhí)行速度的模塊或函數(shù)編譯為本地機(jī)器碼,如頻繁調(diào)用的函數(shù)、出現(xiàn)在循環(huán)內(nèi)的函數(shù)等。而將相對(duì)來(lái)說(shuō)對(duì)程序的執(zhí)行速度起次要作用、主要影響程序長(zhǎng)度的模塊或函數(shù)編譯為P-CODE。如用戶接口過(guò)程中的菜單和對(duì)話框模塊,因?yàn)檫@里程序執(zhí)行速度上的犧牲相對(duì)于用戶的工作速度來(lái)說(shuō),是微不足道的。還有一些很少使用的模塊或函數(shù),如出錯(cuò)處理函數(shù)、一般情形下不會(huì)用到的功能模塊也應(yīng)編譯為P-CODE。

        4、P-CODE程序調(diào)試

        用p-CODE編譯的程序,可使用Microsoft提供的調(diào)試工具如CodeView調(diào)試器等來(lái)進(jìn)行調(diào)試。它對(duì)源代碼級(jí)和P-CODE匯編指令級(jí)二者都給予支持,所有正常的CodeView調(diào)試器命令。如BREAK、STEP、wATCH等在本地機(jī)器碼和P-CODE碼兩種方式下都會(huì)起作用,只不過(guò)在P-CODE方式下,程序在斷點(diǎn)暫停后,寄存器窗口顯示的是堆棧和P-CODE工作引擎的狀態(tài)。

        因?yàn)镻-CODE的引用會(huì)產(chǎn)生許多跳轉(zhuǎn)指令,使得目標(biāo)程序調(diào)試時(shí)難于閱讀和跟蹤,所以較好的策略是在程序開發(fā)調(diào)試階段用編譯開關(guān)“/OF”關(guān)掉引用。當(dāng)程序全部調(diào)試完畢后再打開引用優(yōu)化編譯開關(guān)。

        5、P-CODE性能分析

        P-CODE技術(shù)的本質(zhì)是用程序執(zhí)行時(shí)間的少量增加來(lái)?yè)Q取其長(zhǎng)度的明顯減小。雖然P-CODE指令由工作引擎解釋執(zhí)行,固有地慢于CPU本地機(jī)器碼的執(zhí)行,但程序總體所需的執(zhí)行時(shí)間還取決于一些系統(tǒng)因素和程序員使用P-CODE的技巧。在內(nèi)存一定的環(huán)境中,大程序長(zhǎng)度的減小也相應(yīng)地減少了其執(zhí)行時(shí)所需的內(nèi)存容量,從而需要較少的虛擬內(nèi)存交換頁(yè),且相應(yīng)地提高了Cache命中率,因而減少了其運(yùn)行時(shí)的系統(tǒng)開銷,故其P-CODE版本和本地機(jī)器碼版本最終在執(zhí)行速度上的差異很小。另外。采用p-CODE后,程序長(zhǎng)度減小了,系統(tǒng)總的吞吐率也得到了改善。

        6、結(jié)束語(yǔ)

        Microsoft的P-CODE技術(shù)為程序員提供了一種以少量增加運(yùn)行時(shí)間代價(jià)而較方便地壓縮執(zhí)行文件長(zhǎng)度的方法。它可通過(guò)簡(jiǎn)單地重編譯而在程序中全局地使用,局部使用時(shí)將編譯指示置于關(guān)鍵過(guò)程之前,可保證最大限度地壓縮代碼長(zhǎng)度而使性能損失最小化。

        猜你喜歡
        編譯器堆棧寄存器
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
        嵌入式軟件堆棧溢出的動(dòng)態(tài)檢測(cè)方案設(shè)計(jì)*
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測(cè)
        通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        一種用于分析MCS-51目標(biāo)碼堆棧深度的方法
        一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
        編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)
        熟女人妻丰满熟妇啪啪| 亚洲av成人片色在线观看| 亚洲国产精品成人精品无码区在线| 国产精品v片在线观看不卡| 久久久久久人妻一区二区三区| 国产va免费精品高清在线观看 | 亚洲午夜无码久久久久软件| 我的极品小姨在线观看| 就爱射视频在线视频在线| 国内精品久久久久国产盗摄| 九九99久久精品国产| 视频在线观看一区二区三区| 久久国产劲爆内射日本| 日本九州不卡久久精品一区| 久久人妻少妇嫩草av| 亚洲aⅴ在线无码播放毛片一线天 中国国语毛片免费观看视频 | 神马影院日本一区二区| 不卡av电影在线| 三上悠亚av影院在线看| yy111111少妇影院| 久久精品国产精品亚洲艾| 亚洲综合av一区二区三区蜜桃| 国产人妻精品无码av在线| 艳妇乳肉豪妇荡乳av无码福利 | 50岁熟妇的呻吟声对白| 国产中文字幕乱码在线| 日韩精品成人一区二区三区| 中文字日产幕码三区的做法步| 国产二级一片内射视频播放| 丰满爆乳一区二区三区| 亚洲国产AⅤ精品一区二区久 | 国产办公室秘书无码精品99| 夜夜高潮夜夜爽夜夜爱爱| 在线国产视频精品视频| 日韩人妻大奶子生活片| 久久777国产线看观看精品| 久激情内射婷内射蜜桃| 亚洲不卡无码高清视频| 大岛优香中文av在线字幕| 色婷婷色丁香久久婷婷| 国产又黄又爽又色的免费|