用于應(yīng)用程序的編譯優(yōu)化的方法以及編譯器的制造方法
【專利摘要】本發(fā)明公開了一種用于應(yīng)用程序的編譯優(yōu)化的方法及相應(yīng)的編譯器。該方法包括:確定所述應(yīng)用程序的源代碼中的可常量化變量;利用所述可常量化變量,獲取最終的常量變量以及所述常量變量的值;以及利用所述常量變量以及所述常量變量的值,對(duì)所述應(yīng)用程序進(jìn)行編譯。
【專利說明】用于應(yīng)用程序的編譯優(yōu)化的方法w及編譯器
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及應(yīng)用程序的編譯技術(shù),更具體地,涉及用于應(yīng)用程序的編譯優(yōu)化的方 法W及編譯器。
【背景技術(shù)】
[0002] 當(dāng)前,應(yīng)用程序需具備處理來自外部的信息的能力。該些外部信息包括但不限于: 執(zhí)行環(huán)境變量(例如,表示操作系統(tǒng)級(jí)別的變量等)、來自用戶的命令行輸入、應(yīng)用程序的外 部配置文件等。
[0003] 通常,應(yīng)用程序的開發(fā)者通過在源代碼中使用例如IF/ELSE或SW口CH語句的分支 選擇語句來實(shí)現(xiàn)有關(guān)外部信息的處理。
[0004] 然而,在某些情況下,應(yīng)用程序可能被要求總是在一個(gè)穩(wěn)定的環(huán)境中運(yùn)行,或者僅 應(yīng)用于特定的場景。該樣,應(yīng)用程序在運(yùn)行時(shí),相關(guān)的變量的分支選擇語句實(shí)際上只運(yùn)行一 個(gè)分支語句,而其它分支語句將變得多余。但該些多余的分支語句仍然包含在應(yīng)用程序的 可執(zhí)行文件中,從而增加可執(zhí)行文件的大小,并可能降低應(yīng)用程序的整體性能。
[0005] 為了避免上述的情形,目前常用的方法是在對(duì)應(yīng)用程序的源代碼進(jìn)行編譯前使用 例如#ifdef的預(yù)處理命令對(duì)源代碼進(jìn)行預(yù)處理。通過該預(yù)處理命令,可W幫助在編譯時(shí)刪 除無用的分支。
[0006] 該種預(yù)處理適用于結(jié)構(gòu)良好的應(yīng)用程序,但對(duì)于具有大量遺留代碼(1e ga C y code)的非結(jié)構(gòu)良好的應(yīng)用程序,則并不適用。此外,采用該種預(yù)處理,可能導(dǎo)致代碼鹿大, 可讀性差,并且不能靈活地適用于所有的場景。
【發(fā)明內(nèi)容】
[0007] 根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于應(yīng)用程序的編譯優(yōu)化的方法,其包括:確 定所述應(yīng)用程序的源代碼中的可常量化變量;利用所述可常量化變量,獲取最終的常量變 量W及所述常量變量的值;W及利用所述常量變量W及所述常量變量的值,對(duì)所述應(yīng)用程 序進(jìn)行編譯。
[0008] 根據(jù)本發(fā)明的另一個(gè)方面,提供了一種用于應(yīng)用程序的編譯優(yōu)化的編譯器,其包 括:可常量化變量確定裝置,其被配置為確定所述應(yīng)用程序的源代碼中的可常量化變量; 常量變量獲取裝置,其被配置為利用所述可常量化變量,獲取最終的常量變量W及所述常 量變量的值;W及編譯裝置,其被配置為利用所述常量變量W及所述常量變量的值,對(duì)所述 應(yīng)用程序進(jìn)行編譯。
【專利附圖】
【附圖說明】
[0009] 通過結(jié)合附圖對(duì)本公開示例性實(shí)施方式進(jìn)行更詳細(xì)的描述,本公開的上述W及其 它目的、特征和優(yōu)勢將變得更加明顯,其中,在本公開示例性實(shí)施方式中,相同的參考標(biāo)號(hào) 通常代表相同部件。
[0010] 圖1示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框 圖。
[0011] 圖2是根據(jù)本發(fā)明的實(shí)施例的用于應(yīng)用程序的編譯優(yōu)化的方法的示意性流程圖;
[0012] 圖3是圖2的實(shí)施例中確定可常量化變量的步驟的示意性流程圖;
[0013]圖4是根據(jù)本發(fā)明的實(shí)施例的用于應(yīng)用程序的編譯優(yōu)化的編譯器的示意性方框 圖。
【具體實(shí)施方式】
[0014] 在附圖中顯示了本公開的一些優(yōu)選實(shí)施方式,下面將參照附圖更詳細(xì)地描述該些 優(yōu)選實(shí)施方式。然而,可各種形式實(shí)現(xiàn)本公開,其不應(yīng)被該里闡述的實(shí)施方式所限制。 相反,提供該些實(shí)施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整 地傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0015]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明的各個(gè)方面可W實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算 機(jī)程序產(chǎn)品。因此,本發(fā)明的各個(gè)方面可W具體實(shí)現(xiàn)為W下形式,即;完全的硬件實(shí)施方式、 完全的軟件實(shí)施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結(jié)合的實(shí)施方 式,該里可W統(tǒng)稱為"電路"、"模塊"或"系統(tǒng)"。此外,在一些實(shí)施例中,本發(fā)明的各個(gè)方面 還可W實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介 質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。
[0016] 可W采用一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可W是計(jì)算 機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可W是一但不限 于一電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意W上的組合。計(jì)算 機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括;具有一個(gè)或多個(gè)導(dǎo)線的電連接、便 攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器 (EPROM或閃存)、光纖、便攜式緊湊盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者 上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可W是任何包含或存儲(chǔ)程序的 有形介質(zhì),該程序可W被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0017] 計(jì)算機(jī)可讀的信號(hào)介質(zhì)可W包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào), 其中承載了計(jì)算機(jī)可讀的程序代碼。該種傳播的數(shù)據(jù)信號(hào)可W采用多種形式,包括一但 不限于一電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可W是 計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)W外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可W發(fā)送、傳播或者 傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0018] 計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可W用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限 于一無線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0019]可-種或多種程序設(shè)計(jì)語言的任意組合來編寫用于執(zhí)行本發(fā)明操作的計(jì)算 機(jī)程序代碼,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言一諸如化va、Smallta化、C++ 等,還包括常規(guī)的過程式程序設(shè)計(jì)語言一諸如"C"語言或類似的程序設(shè)計(jì)語言。程序代碼可 W完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、 部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。 在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可W通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN) 或廣域網(wǎng)(WAN)-連接到用戶計(jì)算機(jī),或者,可W連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù) 提供商來通過因特網(wǎng)連接)。
[0020] 下面將參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和 /或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框W及流程圖和/或框圖中 各方框的組合,都可W由計(jì)算機(jī)程序指令實(shí)現(xiàn)。該些計(jì)算機(jī)程序指令可W提供給通用計(jì)算 機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得該些計(jì)算 機(jī)程序指令在通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖 和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。
[0021] 也可W把該些計(jì)算機(jī)程序指令存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中,該些指令使得計(jì)算機(jī)、 其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備W特定方式工作,從而,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的 指令就產(chǎn)生出包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的指令 的制造品(articleofmanufacture)。
[0022] 也可W把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備 上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,W產(chǎn)生計(jì) 算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令提供實(shí)現(xiàn)流程圖和/ 或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的過程。
[0023] 圖1示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性計(jì)算機(jī)系統(tǒng)/服務(wù)器12的框 圖。圖1顯示的計(jì)算機(jī)系統(tǒng)/服務(wù)器12僅僅是一個(gè)示例,不應(yīng)對(duì)本發(fā)明實(shí)施例的功能和使 用范圍帶來任何限制。
[0024] 如圖1所示,計(jì)算機(jī)系統(tǒng)/服務(wù)器12W通用計(jì)算設(shè)備的形式表現(xiàn)。計(jì)算機(jī)系統(tǒng) /服務(wù)器12的組件可W包括但不限于;一個(gè)或者多個(gè)處理器或者處理單元16,系統(tǒng)存儲(chǔ)器 28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲(chǔ)器28和處理單元16)的總線18。
[00巧]總線18表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲(chǔ)器總線或者存儲(chǔ)器控制器, 外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉 例來說,該些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC) 總線,增強(qiáng)型ISA總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局域總線W及外圍組件互連(PCI)總線。
[0026]計(jì)算機(jī)系統(tǒng)/服務(wù)器12典型地包括多種計(jì)算機(jī)系統(tǒng)可讀介質(zhì)。該些介質(zhì)可W是 任何能夠被計(jì)算機(jī)系統(tǒng)/服務(wù)器12訪問的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動(dòng) 的和不可移動(dòng)的介質(zhì)。
[0027]系統(tǒng)存儲(chǔ)器28可W包括易失性存儲(chǔ)器形式的計(jì)算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存 取存儲(chǔ)器(RAM)30和/或高速緩存存儲(chǔ)器32。計(jì)算機(jī)系統(tǒng)/服務(wù)器12可W進(jìn)一步包括其 它可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)系統(tǒng)存儲(chǔ)介質(zhì)。僅作為舉例,存儲(chǔ)系統(tǒng)34 可W用于讀寫不可移動(dòng)的、非易失性磁介質(zhì)(圖1未顯示,通常稱為"硬盤驅(qū)動(dòng)器")。盡管圖 1中未示出,可W提供用于對(duì)可移動(dòng)非易失性磁盤(例如"軟盤")讀寫的磁盤驅(qū)動(dòng)器,W及對(duì) 可移動(dòng)非易失性光盤(例如CD-ROM,DVD-ROM或者其它光介質(zhì))讀寫的光盤驅(qū)動(dòng)器。在該些 情況下,每個(gè)驅(qū)動(dòng)器可W通過一個(gè)或者多個(gè)數(shù)據(jù)介質(zhì)接口與總線18相連。存儲(chǔ)器28可W 包括至少一個(gè)程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個(gè))程序模塊,該些程序模塊被 配置W執(zhí)行本發(fā)明各實(shí)施例的功能。
[0028]具有一組(至少一個(gè))程序模塊42的程序/實(shí)用工具40,可W存儲(chǔ)在例如存儲(chǔ)器 28中,該樣的程序模塊42包括一但不限于一操作系統(tǒng)、一個(gè)或者多個(gè)應(yīng)用程序、其它 程序模塊W及程序數(shù)據(jù),該些示例中的每一個(gè)或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實(shí)現(xiàn)。程 序模塊42通常執(zhí)行本發(fā)明所描述的實(shí)施例中的功能和/或方法。
[0029]計(jì)算機(jī)系統(tǒng)/服務(wù)器12也可W與一個(gè)或多個(gè)外部設(shè)備14 (例如鍵盤、指向設(shè)備、 顯示器24等)通信,還可與一個(gè)或者多個(gè)使得用戶能與該計(jì)算機(jī)系統(tǒng)/服務(wù)器12交互的設(shè) 備通信,和/或與使得該計(jì)算機(jī)系統(tǒng)/服務(wù)器12能與一個(gè)或多個(gè)其它計(jì)算設(shè)備進(jìn)行通信的 任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。該種通信可W通過輸入/輸出(I/O)接口 22 進(jìn)行。并且,計(jì)算機(jī)系統(tǒng)/服務(wù)器12還可W通過網(wǎng)絡(luò)適配器20與一個(gè)或者多個(gè)網(wǎng)絡(luò)(例如 局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20 通過總線18與計(jì)算機(jī)系統(tǒng)/服務(wù)器12的其它模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可W 結(jié)合計(jì)算機(jī)系統(tǒng)/服務(wù)器12使用其它硬件和/或軟件模塊,包括但不限于;微代碼、設(shè)備驅(qū) 動(dòng)器、兀余處理單元、外部磁盤驅(qū)動(dòng)陣列、RAID系統(tǒng)、磁帶驅(qū)動(dòng)器W及數(shù)據(jù)備份存儲(chǔ)系統(tǒng)等。
[0030] 圖2是根據(jù)本發(fā)明的實(shí)施例的用于應(yīng)用程序的編譯優(yōu)化的方法的示意性流程圖。 下面結(jié)合附圖,對(duì)本實(shí)施例進(jìn)行詳細(xì)描述。
[0031] 本發(fā)明的實(shí)施例的主要思想是將應(yīng)用程序的源代碼中在運(yùn)行時(shí)能夠成為常量的 變量在對(duì)應(yīng)用程序進(jìn)行編譯時(shí)提前常量化,從而無需改變源代碼就能夠刪除源代碼中的無 效語句,并能夠靈活地生成各種特定于環(huán)境、場景的執(zhí)行文件。
[0032] 參見圖2,在步驟S210,確定應(yīng)用程序的源代碼中的可常量化變量。在本實(shí)施例 中,所謂可常量化變量是指在運(yùn)行時(shí)能夠安全地成為常量的變量,也就是說,在運(yùn)行時(shí)具有 唯一確定的常量值的變量。
[0033] 圖3示出了確定可常量化變量的步驟S210的示意性流程圖。如圖3所示,在步驟 S301,分析應(yīng)用程序的源代碼,W獲得潛在可常量化變量。在本實(shí)施例中,所謂潛在可常量 化變量是指可能成為可常量化變量的變量。
[0034] 在一個(gè)實(shí)施例中,首先,在源代碼中查找分支選擇語句。分支選擇語句可W是例如 C語言中的IF/ELSE語句或者SW口CH語句。接著,提取所查找的分支選擇語句中的變量,作 為潛在可常量化變量。在對(duì)源代碼查找了所有的分支選擇語句并獲得了潛在可常量化變量 后,可生成潛在可常量化變量列表W包含所有的潛在可常量化變量。
[00巧]在另一個(gè)實(shí)施例中,首先,在源代碼中查找分支選擇語句。如上所述,分支選擇語 句例如是IF/ELSE語句或SW口CH語句。接著,確定在所查找的分支選擇語句中是否存在函 數(shù)調(diào)用。然后,如果確定在分支選擇語句中沒有函數(shù)調(diào)用,則提取該分支選擇語句中的變 量,作為潛在可常量化變量。相反,如果確定在分支選擇語句中存在函數(shù)調(diào)用,則可進(jìn)一步 確定所調(diào)用的函數(shù)是否是語義確定的函數(shù),即調(diào)用時(shí)可生成確定值的函數(shù)。如果確定所調(diào) 用的函數(shù)是語義確定的函數(shù),則提取該分支選擇語句中的變量,作為潛在可常量化變量。相 反,如果確定所調(diào)用的函數(shù)不是語義確定的函數(shù),則該分支選擇語句中的變量不是潛在可 常量化變量。對(duì)源代碼中的所有分支選擇語句進(jìn)行上述的處理,并生成潛在可常量化變量 列表W包含所獲得的潛在可常量化變量。
[0036]在獲得了潛在可常量化變量后,可進(jìn)一步對(duì)該些潛在可常量化變量進(jìn)行"提純"處 理,W去除不能安全地成為常量的潛在可常量化變量。具體地,在步驟S305,從在步驟S301 中獲得的潛在可常量化變量中除去被多次賦值的潛在可常量化變量。在一個(gè)實(shí)施例中,可 對(duì)所獲得的潛在可常量化變量的每一個(gè)的賦值操作進(jìn)行計(jì)數(shù)。在分析源代碼期間,每當(dāng)處 理一個(gè)賦值語句時(shí),賦值語句中的變量的賦值計(jì)數(shù)值就增加1。通過上述操作,可W得到每 一個(gè)潛在可常量化變量的賦值計(jì)數(shù)值。如果某個(gè)潛在可常量化變量的賦值計(jì)數(shù)值超過1,則 表明該潛在可常量化變量在運(yùn)行時(shí)不能安全地成為常量。因此,從所獲得的潛在可常量化 變量中除去賦值操作的計(jì)數(shù)值超過1的潛在可常量化變量。
[0037] 然后,在步驟S310,確定應(yīng)用程序的源代碼中受外部信息變量影響的受影響變量。 在本實(shí)施例中,外部信息變量是指表示來自外部的信息的變量,例如命令行參數(shù)、描述應(yīng)用 程序的運(yùn)行環(huán)境的環(huán)境變量、應(yīng)用程序的外部配置文件中的參數(shù)變量等。
[0038] 在一個(gè)實(shí)施例中,首先,在應(yīng)用程序的源代碼中,查找命令行參數(shù)或者環(huán)境變量或 者應(yīng)用程序的外部配置文件中的參數(shù)變量,作為外部信息變量。接著,在源代碼中,查找被 該些外部信息變量直接賦值的變量,作為直接受影響變量。然后,查找在直接受影響變量被 視為常量時(shí)通過常量傳播被賦值為常量的變量,作為間接受影響變量。直接受影響變量和 間接受影響變量構(gòu)成受影響變量。在實(shí)現(xiàn)中,可生成受外部信息影響變量列表W包含上述 的受影響變量??蛇x地,在上述受外部影響變量列表中也可包含外部信息變量。
[0039] 雖然W上按照步驟S30US305和S310的順序進(jìn)行了描述,但本領(lǐng)域的普通技術(shù)人 員容易知道,上述的步驟S301、S305與步驟S310之間的執(zhí)行順序并不受限于此。
[0040] 接著,在步驟S315,從剩余的潛在可常量化變量和受影響變量中選擇相同的變量, 作為可常量化變量。通過上述的步驟S30US305和S310,可獲得經(jīng)過"提純"處理的潛在可 常量化變量列表和受外部信息影響變量列表。因此,可常量化變量是在潛在可常量化變量 列表和受外部信息影響變量列表中同時(shí)出現(xiàn)的變量。
[0041] 下面通過兩個(gè)具體的例子說明確定可常量化變量的過程。
[0042] 例子1 ;假定應(yīng)用程序的部分源代碼如下所示:
[0043]
【權(quán)利要求】
1. 一種用于應(yīng)用程序的編譯優(yōu)化的方法,包括: 確定所述應(yīng)用程序的源代碼中的可常量化變量; 利用所述可常量化變量,獲取最終的常量變量以及所述常量變量的值;以及 利用所述常量變量以及所述常量變量的值,對(duì)所述應(yīng)用程序進(jìn)行編譯。
2. 根據(jù)權(quán)利要求1所述的方法,其中,確定所述應(yīng)用程序的源代碼中的可常量化變量 包括: 分析所述源代碼,以獲得潛在可常量化變量; 從所述潛在可常量化變量中除去被多次賦值的潛在可常量化變量; 確定所述源代碼中受外部信息變量影響的受影響變量;以及 從剩余的所述潛在可常量化變量和所述受影響變量中選擇相同的變量,作為所述可常 量化變量。
3. 根據(jù)權(quán)利要求2所述的方法,其中,分析所述源代碼以獲得潛在可常量化變量包括: 在所述源代碼中查找分支選擇語句;以及 提取所述分支選擇語句中的變量,作為所述潛在可常量化變量。
4. 根據(jù)權(quán)利要求2所述的方法,其中,分析所述源代碼以獲得潛在可常量化變量包括: 在所述源代碼中查找分支選擇語句; 如果在所述分支選擇語句中沒有函數(shù)調(diào)用,則提取所述分支選擇語句中的變量,作為 所述潛在可常量化變量; 如果在所述分支選擇語句中存在函數(shù)調(diào)用且所調(diào)用的函數(shù)是語義確定的函數(shù),則提取 所述分支選擇語句中的變量,作為所述潛在可常量化變量。
5. 根據(jù)權(quán)利要求2所述的方法,其中,從所述潛在可常量化變量中除去被多次賦值的 潛在可常量化變量包括: 對(duì)所述潛在可常量化變量的賦值操作進(jìn)行計(jì)數(shù);以及 除去賦值操作的計(jì)數(shù)值超過1的潛在可常量化變量。
6. 根據(jù)權(quán)利要求2所述的方法,其中,確定所述源代碼中受外部信息變量影響的受影 響變量包括: 在所述源代碼中,查找命令行參數(shù)或者描述所述應(yīng)用程序的運(yùn)行環(huán)境的環(huán)境變量或者 所述應(yīng)用程序的外部配置文件中的參數(shù)變量,作為所述外部信息變量; 查找被所述外部信息變量直接賦值的變量,作為直接受影響變量;以及 查找在所述直接受影響變量被視為常量時(shí)通過常量傳播被賦值為常量的變量,作為間 接受影響變量; 其中,所述受影響變量包括所述直接受影響變量和所述間接受影響變量。
7. 根據(jù)權(quán)利要求1所述的方法,其中,利用所述可常量化變量,獲取最終的常量變量以 及所述常量變量的值包括: 呈現(xiàn)所述可常量化變量;以及 接受在所述可常量化變量中指定常量變量和所述常量變量的值。
8. 根據(jù)權(quán)利要求1所述的方法,其中,利用所述可常量化變量,獲取最終的常量變量以 及所述常量變量的值包括: 讀取描述將成為常量變量的變量及其相應(yīng)的值的外部配置文件;以及 將所述可常量化變量中與所述外部配置文件中的變量相同的可常量化變量確定為常 量變量。
9. 一種用于應(yīng)用程序的編譯優(yōu)化的編譯器,包括: 可常量化變量確定裝置,其被配置為確定所述應(yīng)用程序的源代碼中的可常量化變量; 常量變量獲取裝置,其被配置為利用所述可常量化變量,獲取最終的常量變量以及所 述常量變量的值;以及 編譯裝置,其被配置為利用所述常量變量以及所述常量變量的值,對(duì)所述應(yīng)用程序進(jìn) 行編譯。
10. 根據(jù)權(quán)利要求9所述的編譯器,其中,所述可常量化變量確定裝置包括: 分析模塊,其被配置為分析所述源代碼,以獲得潛在可常量化變量; 移除模塊,其被配置為從所述潛在可常量化變量中除去被多次賦值的潛在可常量化變 量; 確定模塊,其被配置為確定所述源代碼中受外部信息變量影響的受影響變量;以及 選擇模塊,其被配置為從剩余的所述潛在可常量化變量所述受影響變量中選擇相同的 變量,作為所述可常量化變量。
11. 根據(jù)權(quán)利要求10所述的編譯器,其中,所述分析模塊包括: 查找單元,其被配置為在所述源代碼中查找分支選擇語句;以及 提取單元,其被配置為提取所述分支選擇語句中的變量,作為所述潛在可常量化變量。
12. 根據(jù)權(quán)利要求10所述的編譯器,其中,所述分析模塊包括: 查找單元,其被配置為在所述源代碼中查找分支選擇語句;以及 提取單元,其被配置為如果在所述分支選擇語句中沒有函數(shù)調(diào)用,則提取所述分支選 擇語句中的變量,作為所述潛在可常量化變量,以及如果在所述分支選擇語句中存在函數(shù) 調(diào)用且所調(diào)用的函數(shù)是語義確定的函數(shù),則提取所述分支選擇語句中的變量,作為所述潛 在可常量化變量。
13. 根據(jù)權(quán)利要求10所述的編譯器,其中,所述移除模塊包括: 計(jì)數(shù)單元,其被配置為對(duì)所述潛在可常量化變量的賦值操作進(jìn)行計(jì)數(shù);以及 移除單元,其被配置為除去賦值操作的計(jì)數(shù)值超過1的潛在可常量化變量。
14. 根據(jù)權(quán)利要求10所述的編譯器,其中,所述確定模塊包括: 第一查找單元,其被配置為在所述源代碼中,查找命令行參數(shù)或者描述所述應(yīng)用程序 的運(yùn)行環(huán)境的環(huán)境變量或者所述應(yīng)用程序的外部配置文件中的參數(shù)變量,作為所述外部信 息變量; 第二查找單元,其被配置為查找被所述外部信息變量直接賦值的變量,作為直接受影 響變量,以及查找在所述直接受影響變量被視為常量時(shí)通過常量傳播被賦值為常量的變 量,作為間接受影響變量; 其中,所述受影響變量包括所述直接受影響變量和所述間接受影響變量。
15. 根據(jù)權(quán)利要求9所述的編譯器,其中,所述常量變量獲取裝置包括: 呈現(xiàn)模塊,其被配置為呈現(xiàn)所述可常量化變量;以及 接受模塊,其被配置為接受在所述可常量化變量中指定常量變量和所述常量變量的 值。
16.根據(jù)權(quán)利要求9所述的編譯器,其中,所述常量變量獲取裝置包括: 讀取模塊,其被配置為讀取描述將成為常量變量的變量及其相應(yīng)的值的外部配置文 件;以及 常量變量確定模塊,其被配置為將所述可常量化變量中與所述外部配置文件中的變量 相同的可常量化變量確定為常量變量。
【文檔編號(hào)】G06F9/45GK104375875SQ201310356194
【公開日】2015年2月25日 申請日期:2013年8月15日 優(yōu)先權(quán)日:2013年8月15日
【發(fā)明者】林科文, 紀(jì)金松, 劉志鵬, 蔣健 申請人:國際商業(yè)機(jī)器公司