• / 17
  • 下載費用:30 金幣  

優化軟件的方法和設備.pdf

摘要
申請專利號:

CN201410126197.3

申請日:

2014.03.31

公開號:

CN104951290A

公開日:

2015.09.30

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效 IPC(主分類):G06F 9/44申請日:20140331|||公開
IPC分類號: G06F9/44 主分類號: G06F9/44
申請人: 國際商業機器公司
發明人: 郭久福; 張嗣元; 紀金松; 班懷蕓
地址: 美國紐約阿芒克
優先權:
專利代理機構: 北京市柳沈律師事務所11105 代理人: 于小寧
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201410126197.3

授權公告號:

||||||

法律狀態公告日:

2018.05.01|||2015.11.04|||2015.09.30

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

提供了一種優化軟件的方法和設備。所述軟件包括多個模塊,所述多個模塊包括至少一個可控模塊,所述方法包括:確定所述至少一個可控模塊定義的共享符號,所述共享符號是被所述軟件的兩個或更多模塊使用的符號;生成指示所述至少一個可控模塊定義的共享符號的符號使用文件;以及基于所述符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。利用所述方法和設備,可以準確有效地減少符號表中的符號數量,從而減少加載該符號表所需的時間,提高軟件的運行效率。

權利要求書

權利要求書
1.  一種優化軟件的方法,所述軟件包括多個模塊,所述多個模塊包括至少一個可控模塊,所述方法包括:
確定所述至少一個可控模塊定義的共享符號,所述共享符號是被所述軟件的兩個或更多模塊使用的符號;
生成指示所述至少一個可控模塊定義的共享符號的符號使用文件;以及
基于所述符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。

2.  如權利要求1所述的方法,其中,所述確定所述至少一個可控模塊定義的共享符號包括:
對于所述至少一個可控模塊中的每個可控模塊,分析該可控模塊定義的符號是否被該可控模塊和該可控模塊調用的模塊中的兩個或更多模塊使用,以確定該可控模塊定義的符號是否是共享符號。

3.  如權利要求2所述的方法,其中,通過對所述每個可控模塊和所述每個可控模塊調用的模塊執行過程間分析,來分析所述至少一個可控模塊中的每個可控模塊定義的符號是否被所述每個可控模塊和所述每個可控模塊調用的模塊中的兩個或更多模塊使用。

4.  如權利要求1至3之一所述的方法,其中,所述至少一個可控模塊包括由該軟件的開發者開發的可執行文件和共享庫。

5.  如權利要求1至3之一所述的方法,其中,所述符號使用文件包含指示定義所述共享符號的可控模塊的信息以及指示使用所述共享符號的模塊的信息。

6.  如權利要求1所述的方法,其中,所述基于所述符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號包括:
對所述至少一個可控模塊中的每個可控模塊的源文件重新進行編譯以產生目標文件,其中在所述目標文件中,對所述每個可控模塊中除了所述符號使用文件中指示的共享符號以外的符號設置比所述共享符號更快的訪問方式;以及
對所述每個可控模塊的目標文件重新進行鏈接以產生重新構建后的軟件中與該可控模塊對應的可控模塊,其中所述對應的可控模塊中的符號表僅包含所 述符號使用文件中指示的共享符號。

7.  一種優化軟件的設備,所述軟件包括多個模塊,所述多個模塊包括至少一個可控模塊,所述設備包括:
確定裝置,被配置為確定所述至少一個可控模塊定義的共享符號,所述共享符號是被所述軟件的兩個或更多模塊使用的符號;
生成裝置,被配置為生成指示所述至少一個可控模塊定義的共享符號的符號使用文件;以及
構建裝置,被配置為基于所述符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。

8.  如權利要求7所述的設備,其中,所述確定裝置通過對所述至少一個可控模塊中的每個可控模塊分析該可控模塊定義的符號是否被該可控模塊和該可控模塊調用的模塊中的兩個或更多模塊使用,以確定該可控模塊定義的符號是否是共享符號,來確定所述至少一個可控模塊定義的共享符號。

9.  如權利要求8所述的設備,其中,所述確定裝置通過對所述每個可控模塊和所述每個可控模塊調用的模塊執行過程間分析,來分析所述至少一個可控模塊中的每個可控模塊定義的符號是否被所述每個可控模塊和所述每個可控模塊調用的模塊中的兩個或更多模塊使用。

10.  如權利要求7至9之一所述的設備,其中,所述至少一個可控模塊包括由該軟件的開發者開發的可執行文件和共享庫。

11.  如權利要求7至9之一所述的設備,其中,所述符號使用文件包含指示定義所述共享符號的可控模塊的信息以及指示使用所述共享符號的模塊的信息。

12.  如權利要求7所述的設備,其中,所述構建裝置包括:
編譯器,被配置為對所述至少一個可控模塊中的每個可控模塊的源文件重新進行編譯以產生目標文件,其中在所述目標文件中,對所述每個可控模塊中除了所述符號使用文件中指示的共享符號以外的符號設置比所述共享符號更快的訪問方式;以及
鏈接器,被配置為對所述每個可控模塊的目標文件重新進行鏈接以產生重新構建后的軟件中與該可控模塊對應的可控模塊,其中所述對應的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。

說明書

說明書優化軟件的方法和設備
技術領域
本發明涉及軟件的優化,并且具體涉及一種優化軟件的方法和設備。
背景技術
軟件可以包括若干模塊,例如可執行文件以及該可執行文件需要調用的庫。每個模塊可以包含大量符號,例如函數和/或變量等,這些符號可以包括由該模塊自己定義并且僅由該模塊使用的符號(在下文中,可稱為內部符號)、由該模塊自己定義并且由兩個或更多模塊使用的符號以及由其他模塊定義并且由兩個或更多模塊使用的符號(在下文中,可以將后兩種符號稱為共享符號)。通常,在每個模塊中建立符號表以存儲該模塊中的所有符號以及與該符號相關的信息,例如該符號的類型、用于定位該符號的、該符號的絕對地址和偏移量等。當運行該模塊時,可以加載所述符號表,并且根據符號表中的符號以及相關信息來執行對應的操作。
隨著軟件變得越來越大,符號表中的符號以及相關信息也越來越多,使得符號表越來越大,這導致在軟件運行時加載和解析符號表耗費的時間增多,從而降低了軟件的運行效率。傳統上,可以使用兩種方法來解決這一問題。在第一種傳統方法中,軟件的開發者人工地分析軟件的各個模塊的源文件以找出軟件中的所有共享符號,并且編寫導出文件,在該導出文件中將所述共享符號標記為“導出”,然后將該導出文件提供給鏈接器,鏈接器根據該導出文件來在模塊的符號表中隱藏內部符號。然而,由于軟件的源文件往往非常大,因此人工找出所有共享符號的操作非常困難和耗時,并且容易遺漏,而且,在例如基于C++語言的軟件中,符號的名稱等在編譯和鏈接期間會發生變化,使得這種方法難以實現。在第二種傳統方法中,軟件的開發者修改每個模塊的源文件,以便給該模塊中的符號增加指示該符號是否應該被隱藏的可見性標簽,然后鏈接器根據符號的可見性標簽來確定是否在符號表中隱藏該符號。這種方法需要修改源文件,因而會引入額外的風險,而且,當更新軟件時,需要相應地更新每 個符號的標簽,因而比較麻煩。
發明內容
為了解決上述問題,本發明的一個目的是提供一種優化軟件的方法和設備,其能夠準確有效地減少符號表的大小,從而減少加載該符號表所需的時間,提高軟件的運行效率。
根據本發明的一個方面,提供了一種優化軟件的方法,所述軟件包括多個模塊,所述多個模塊包括至少一個可控模塊,所述方法包括:確定所述至少一個可控模塊定義的共享符號,所述共享符號是被所述軟件的兩個或更多模塊使用的符號;生成指示所述至少一個可控模塊定義的共享符號的符號使用文件;以及基于所述符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。
根據本發明的另一方面,提供了一種優化軟件的設備,所述軟件包括多個模塊,所述多個模塊包括至少一個可控模塊,所述設備包括:確定裝置,被配置為確定所述至少一個可控模塊定義的共享符號,所述共享符號是被所述軟件的兩個或更多模塊使用的符號;生成裝置,被配置為生成指示所述至少一個可控模塊定義的共享符號的符號使用文件;以及構建裝置,被配置為基于所述符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。
利用根據本發明上述方面的方法和設備,可以自動地分析軟件的可控模塊中的各個符號的使用狀態,并且基于分析結果來重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含被該軟件的多個模塊共享的共享符號。這樣,可以準確且有效地減少符號表中的符號數量,縮短軟件運行時加載和解析該符號表所耗費的時間,提高軟件的運行效率。
附圖說明
通過結合附圖對本公開示例性實施方式進行更詳細的描述,本公開的上述以及其它目的、特征和優勢將變得更加明顯,其中,在本公開示例性實施方式中,相同的參考標號通常代表相同部件。
圖1示出了適于用來實現本發明實施方式的示例性計算機系統/服務器12的框圖。
圖2示意性地示出了包括多個模塊的軟件的架構。
圖3示出了根據本發明實施例的優化軟件的方法的流程圖。
圖4示意性地示出了對一個可控模塊生成模塊符號使用文件的過程。
圖5示出了根據本發明實施例的優化軟件的設備的框圖。
圖6示出了圖5所示的構建裝置的結構框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的優選實施方式。雖然附圖中顯示了本公開的優選實施方式,然而應該理解,可以以各種形式實現本公開而不應被這里闡述的實施方式所限制。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠將本公開的范圍完整地傳達給本領域的技術人員。
圖1示出了適于用來實現本發明實施方式的示例性計算機系統/服務器12的框圖。圖1顯示的計算機系統/服務器12僅僅是一個示例,不應對本發明實施例的功能和使用范圍帶來任何限制。
如圖1所示,計算機系統/服務器12以通用計算設備的形式表現。計算機系統/服務器12的組件可以包括但不限于:一個或者多個處理器或者處理單元16,系統存儲器28,連接不同系統組件(包括系統存儲器28和處理單元16)的總線18。
總線18表示幾類總線結構中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結構中的任意總線結構的局域總線。舉例來說,這些體系結構包括但不限于工業標準體系結構(ISA)總線,微通道體系結構(MAC)總線,增強型ISA總線、視頻電子標準協會(VESA)局域總線以及外圍組件互連(PCI)總線。
計算機系統/服務器12典型地包括多種計算機系統可讀介質。這些介質可以是任何能夠被計算機系統/服務器12訪問的可用介質,包括易失性和非易失性介質,可移動的和不可移動的介質。
系統存儲器28可以包括易失性存儲器形式的計算機系統可讀介質,例如隨機存取存儲器(RAM)30和/或高速緩存存儲器32。計算機系統/服務器12可以進一步包括其它可移動/不可移動的、易失性/非易失性計算機系統存儲介質。僅作為舉例,存儲系統34可以用于讀寫不可移動的、非易失性磁介質(圖1未顯示,通常稱為“硬盤驅動器”)。盡管圖1中未示出,可以提供用于對可 移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅動器,以及對可移動非易失性光盤(例如CD-ROM,DVD-ROM或者其它光介質)讀寫的光盤驅動器。在這些情況下,每個驅動器可以通過一個或者多個數據介質接口與總線18相連。存儲器28可以包括至少一個程序產品,該程序產品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執行本發明各實施例的功能。
具有一組(至少一個)程序模塊42的程序/實用工具40,可以存儲在例如存儲器28中,這樣的程序模塊42包括——但不限于——操作系統、一個或者多個軟件、其它程序模塊以及程序數據,這些示例中的每一個或某種組合中可能包括網絡環境的實現。程序模塊42通常執行本發明所描述的實施例中的功能和/或方法。
計算機系統/服務器12也可以與一個或多個外部設備14(例如鍵盤、指向設備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機系統/服務器12交互的設備通信,和/或與使得該計算機系統/服務器12能與一個或多個其它計算設備進行通信的任何設備(例如網卡,調制解調器等等)通信。這種通信可以通過輸入/輸出(I/O)接口22進行。并且,計算機系統/服務器12還可以通過網絡適配器20與一個或者多個網絡(例如局域網(LAN),廣域網(WAN)和/或公共網絡,例如因特網)通信。如圖所示,網絡適配器20通過總線18與計算機系統/服務器12的其它模塊通信。應當明白,盡管圖中未示出,可以結合計算機系統/服務器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設備驅動器、冗余處理單元、外部磁盤驅動陣列、RAID系統、磁帶驅動器以及數據備份存儲系統等。
下面,將參照附圖描述根據本發明實施例的優化軟件的方法和設備。
當編寫軟件時,開發者首先編寫源文件(源代碼),然后利用編譯器來編譯該源文件,從而生成目標文件。接下來,利用鏈接器將目標文件以及需要調用的庫鏈接到一起,從而生成可執行文件或共享庫。所述需要調用的庫可以包括開發者按照上述方式預先開發的共享庫、由第三方開發的庫和/或系統庫。所述可執行文件和庫可以稱為模塊,其中,由于可執行文件和共享庫是開發者自己開發的,換言之,開發者可以通過修改源文件來控制可執行文件和共享庫,因此,可以將所述可執行文件和共享庫(以及開發者自己開發的其他模塊)稱為可控模塊,反之,由于開發者通常不能修改第三方庫和系統庫,因此可以將第三方庫和系統庫稱為不可控模塊。當然,在其他實施例中,也可以將雖然不是 開發者自己開發、但是開發者能夠獲取并修改其源代碼的第三方庫和/或系統庫稱為可控模塊。圖2示意性地示出了軟件的架構。如圖2中的箭頭所示,在軟件運行期間,作為可控模塊的可執行文件和共享庫以及作為不可控模塊的第三方庫和系統庫可以互相調用,從而執行相應的操作。
如上文所述,軟件的每個模塊可以定義多個符號,這些符號中的一部分僅在該模塊內部使用(即,內部符號),另一部分符號可被該模塊以及其他模塊使用(即,共享符號)。在本發明的實施例中,自動地分析軟件的各個可控模塊定義的符號以確定共享符號,并且基于所確定的共享符號重新構建所述軟件,使得所述軟件的各個可控模塊中的符號表僅包含所述共享符號,從而減小符號表的大小,提高軟件運行效率。
下面,將參照圖3來更詳細地描述根據本發明實施例的優化軟件的方法。該軟件可以包括多個模塊,所述多個模塊包括至少一個可控模塊。
如圖3所示,在步驟S301中,確定所述至少一個可控模塊定義的共享符號。如上文所述,所述共享符號是被所述軟件的兩個或更多模塊使用的符號。
在本發明的實施例中,可以自動地分析該軟件的各個模塊,以找出所述至少一個可控模塊定義的所有共享符號。
具體地,可以分析所述至少一個可控模塊中的每個可控模塊定義的符號的使用狀態,即,分析所述至少一個可控模塊中的每個可控模塊定義的符號是否被所述每個可控模塊和所述每個可控模塊調用的模塊(其可以包括可控模塊和/或不可控模塊)中的兩個或更多模塊使用,以確定所述每個可控模塊定義的符號是否是共享符號。例如,可以通過對所述至少一個可控模塊中的每個可控模塊以及所述每個可控模塊調用的其他模塊執行過程間分析(IPA),來確定所述每個可控模塊定義的符號的使用狀態。例如,對于作為可控模塊的可執行文件定義的每個符號,可以通過IPA來確定該符號是否被該可執行文件以及該可執行文件調用的庫中的兩個或更多模塊使用,從而確定該符號是否是共享符號。執行IPA的方法是本領域公知的,在這里不再贅述。
在步驟S302中,生成指示所述至少一個可控模塊定義的共享符號的符號使用文件。除了指示所述至少一個可控模塊定義的共享符號以外,所述符號使用文件還可以包含指示定義所述共享符號的可控模塊的信息以及指示使用所述共享符號的模塊的信息。
具體地,可以對于所述至少一個可控模塊中的每個可控模塊,基于步驟 S301中的確定結果,生成指示所述每個可控模塊和所述每個可控模塊調度調用的其他可控模塊定義的共享符號的符號使用文件(以下可稱為模塊符號使用文件)。然后,可以合并對于所述至少一個可控模塊中的全部可控模塊生成的模塊符號使用文件,以生成指示所述至少一個可控模塊定義的所有共享符號的符號使用文件(以下可稱為總符號使用文件)。所述模塊符號使用文件和總符號使用文件可以采用任何適當的格式,例如表格、文本文件等。具體地,可以通過將各個模塊符號使用文件中與相同的共享符號相關的信息(例如指示使用該共享符號的模塊的信息)合并,來合并各個模塊符號使用文件。例如,假設軟件包含兩個可控模塊,并且分別對這兩個可控模塊生成下表1和2所示的模塊符號使用文件:
符號DefRefsym1mod1mod1,mod2sym2mod2mod1sym3mod2mod2
表1
符號DefRefsym1mod1mod1sym2mod2mod2,mod1sym3mod2mod2
表2
作為示例,每個模塊使用文件可以包括字段“符號”、“Def”和“Ref”三個字段,其中“符號”字段指示可控模塊以及可控模塊調用的其他可控模塊定義的符號,“Def”字段指示定義所述符號的可控模塊,“Ref”字段表示使用所述符號的模塊(可包括可控模塊和不可控模塊),sym1、sym2和sym3表示符號,mod1和mod2表示可控模塊。通過合并這兩個模塊符號使用文件,具體地,通過將與相同的符號對應的“Ref”字段合并,可以獲得下表3所示的總符號使用文件:
符號DefRefsym1mod1mod1,mod2sym2mod2mod2,mod1sym3mod2mod2
表3
在表3所示的總符號使用文件中,通過“Ref”字段,可以識別每個符號是否是共享符號。
下面結合圖4來示例性地描述步驟S301和S302的具體操作。在圖4的例子中示出了4個可控模塊,即可執行文件exe1(未示出)以及開發者自己開發的共享庫lib1和lib2以及第三方庫lib3,其中可執行文件exe1是使用兩個目標文件(即目標文件obj1和目標文件obj2)生成的,并且該可執行文件exe1調用所述共享庫lib1和lib2以及第三方庫lib3。根據上文所述可知,可執行文件exe1(目標文件obj1和目標文件obj2)以及共享庫lib1和lib2為可控模塊,第三方庫lib3為不可控模塊。此外,假設可執行文件exe1對應的目標文件obj1定義了兩個函數fun1和s_fun1以及一個變量var1,可執行文件exe1對應的目標文件obj2定義了兩個函數fun2和s_fun2以及一個變量var2,共享庫lib1定義了函數l_fun1和l_s_fun1以及一個變量l_var1,共享庫lib2定義了函數l_fun2和l_s_fun2以及一個變量l_var2,第三方庫lib3定義了函數l_fun3和l_s_fun3以及一個變量l_var3。
在步驟S301中,可以按照上文所述的方式,例如通過IPA來分析各個可控模塊(可執行文件exe1和共享庫lib1和lib2)定義的各個符號的使用狀態,從而確定各個可控模塊定義的共享符號,其中,可以通過分析可執行文件exe1的目標文件obj1和目標文件obj2來確定可執行文件exe1定義的符號。在這里,假設通過IPA,可以確定函數l_fun1和l_s_fun1僅被lib1使用,變量l_var1和l_var2以及函數l_fun2被lib1和lib2使用,函數l_s_fun2僅被lib2使用,函數fun1和fun2被exe1、lib1和lib3使用,變量var1和var2以及函數s_fun1和s_fun2被exe1使用。
然后,在步驟S302中,對于可執行文件exe1,生成指示可執行文件exe1以及可執行文件exe1調用的可控模塊(即共享庫lib1和lib2)定義的共享符號的模塊符號使用文件。在本示例中,可以生成下表4所示的表,作為所述模塊符號使用文件。如上所述,該表可以包括字段“符號”、“Def”和“Ref”三個字段,其中“符號”字段指示可執行文件exe1以及可執行文件exe1調用的共享庫lib1和lib2定義的符號,“Def”字段指示定義所述符號的可控模塊,“Ref”字段表示使用所述符號的模塊。
符號DefRef
l_fun1lib1lib1l_var1lib1lib1,lib2l_s_fun1lib1lib1l_fun2lib2lib1,lib2l_var2lib2lib2,lib1l_s_fun2lib2lib2fun1exe1exe1,lib1,lib3var1exe1exe1s_fun1exe1exe1fun2exe1exe1,lib1,lib3var2exe1exe1s_fun1exe1exe1
表4
按照類似的方式,可以對軟件的每個可控模塊,生成指示該可控模塊以及該可控模塊調用的其他可控模塊定義的共享符號的模塊符號使用文件。然后,可以如上文所述,合并對各個可控模塊生成的模塊符號使用文件,以生成指示所述至少一個可控模塊中的所有共享符號的總符號使用文件。
返回圖3,在步驟S303中,基于所述總符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述總符號使用文件中指示的共享符號。至于內部符號,由于其只被定義該內部符號的可控模塊使用,因此可以在需要時在該可控模塊中直接使用它們,而不將其存儲在符號表中。
具體地,可以對該軟件的每個可控模塊的源文件進行重新編譯以產生相應的目標文件,其中在所述目標文件中,對所述每個可控模塊中除了所述總符號使用文件中指示的共享符號以外的符號(即,內部符號)設置比所述共享符號更快的訪問方式。更具體地,對于每個可控模塊中的共享符號,由于其被多個模塊使用,因此需要在該可控模塊的目標文件中提供所述共享符號的尋址信息,并且設置所述共享符號的訪問方式,使得所述可控模塊根據該尋址信息來定位和加載(訪問)所述共享符號。對于每個可控模塊中的內部符號,由于其僅被該可控模塊自己使用,因此可以不在該可控模塊的目標文件中設置尋址信息,而是設置所述內部符號的訪問方式,使得所述可控模塊直接加載(訪問)所述內部符號,從而獲得比共享符號更快的訪問速度。例如,可以將所述總符號使 用文件提供給編譯器。編譯器在對該軟件的各個可控模塊的源文件進行編譯期間,查詢所述總符號使用文件以確定各個可控模塊中的共享符號(以及內部符號),然后在編譯產生的目標文件中,對各個可控模塊中的內部符號設置快速訪問方式,而對共享符號設置常規的訪問方式(慢速訪問方式)。這樣,可以優化為各個可控模塊中生成的目標文件。
然后,可以將優化后的目標文件以及所述總符號使用文件提供給鏈接器。鏈接器查詢所述總符號使用文件以確定各個可控模塊中的共享符號(以及內部符號),并且在重新鏈接所述目標文件以產生重新構建后的軟件中分別與所述各個可控模塊對應的可控模塊(可執行文件或共享庫)期間,在所述對應的可控模塊中的符號表中隱藏所述內部符號,即,不將所述內部符號生成到重新構建后的軟件中的可控模塊中的符號表中,使得符號表僅包含所述總符號使用文件指示的共享符號。
這樣,在需要時,可以運行重新構建后的軟件,而不再運行原來的軟件。可以看到,利用根據本發明實施例的優化軟件的方法,可以自動地分析軟件的各個可控模塊以確定其定義的各個符號的使用狀態,與人工分析所述使用狀態的傳統方法相比,顯著減輕了軟件開發者的負擔。此外,所述方法可以準確地識別軟件中的內部符號并減少符號表中的符號數量,從而減少軟件(即,重新構建后的軟件)運行時加載和解析該符號表耗費的時間,提高軟件的運行效率。而且,由于在重新構建后的軟件的各個可控模塊的符號表中隱藏了內部符號,因此可以防止軟件的實現細節被暴露給外部,提高了軟件的安全性。
應當認識到,上文所述的優化軟件的方法只是說明性的,而不是限制性的,本領域技術人員可以對其做出各種改變,而不背離本發明的范圍。例如,盡管在上文中針對步驟S303的描述中提到將整個總符號使用文件提供給編譯器和鏈接器以重新構建所述軟件,這不是限制性的,也可以按照定義各個符號的模塊(例如,上表4中的“Def”字段中指示的模塊),將總符號使用文件劃分為多個子文件。然后,在對每個可控模塊進行重新編譯和鏈接時,將與該可控子模塊對應的子文件提供給編譯器和鏈接器,使得編譯器和鏈接器僅基于該子文件來進行編譯和鏈接。例如,可以按照定義各個符號的模塊,將上表3所述的總符號使用文件劃分為下表5和6所示的兩個子文件:
符號DefRefsym1mod1mod1,mod2
表5
符號DefRefsym2mod2mod2,mod1sym3mod2mod2
表6
然后,在對可控模塊1(mod1)進行重新編譯和鏈接時,可以將表5所示的子文件提供給編譯器和鏈接器,而在在對可控模塊2(mod2)進行重新編譯和鏈接時,可以將表6所示的子文件提供給編譯器和鏈接器。這樣,由于編譯器和鏈接器接收的子文件包含的符號數量減少,因此可以減少加載和解析該子文件花費的時間。
此外,上述根據本發明實施例的優化軟件的方法可以與上文所述的兩種傳統方法結合使用。例如,在利用根據本發明實施例的優化軟件的方法產生了總符號使用文件之后,可以按照預定的合并規則,將開發者自己編寫的導出文件合并到該總符號使用文件中,然后利用合并后的總符號使用文件來重新構建所述軟件。所述合并規則例如可以是:如果某個符號在導出文件中被標記為“導出”,則無論該符號在合并前的總符號使用文件是否被標記為共享符號,在合并后的總符號使用文件中都將該符號標記為共享符號。例如,可以通過在合并后的總符號使用文件的“Ref”字段中增加相應的標簽來進行這一標記。這樣,軟件的開發者可以通過編寫導出文件來靈活地控制是否導出軟件中的符號。
前面已經參考附圖描述了實現本發明的方法的各個實施例。本領域技術人員可以理解的是,上述方法既可以以軟件方式實現,也可以以硬件方式實現,或者通過軟件與硬件相結合的方式實現。并且,本領域技術人員可以理解,通過以軟件、硬件或者軟硬件相結合的方式實現上述方法中的各個步驟,可以提供一種基于相同發明構思的優化軟件的設備。即使該設備在硬件結構上與通用處理設備相同,由于其中所包含的軟件的作用,使得該設備表現出區別于通用處理設備的特性,從而形成本發明的各個實施例的設備。本發明中所述設備包括若干單元或模塊,所述單元或模塊被配置為執行相應步驟。本領域的所述技術人員通過閱讀本說明書可以理解如何編寫程序實現所述單元或模塊執行的動作。下面,將參考圖5具體描述根據本發明實施例的優化軟件的設備。由于所述設備與所述方法基于相同的發明構思,因此其中相同或相應的實現細節同樣適用于與上述方法對應的設備,由于其在上文中已經進行了詳細和完整的描 述,因此在下文中可能不再進行贅述。
如圖5所示,根據本發明實施例的優化軟件的設備(以下可稱為優化設備)500可以包括確定裝置501、生成裝置502和構建裝置503。
確定裝置501可以確定所述至少一個可控模塊定義的共享符號。如上文所述,所述共享符號是被軟件的兩個或更多模塊(包括可控模塊和/或非可控模塊)使用的符號。具體地,確定裝置501可以通過分析所述至少一個可控模塊中的每個可控模塊定義的符號是否被所述每個可控模塊和所述每個可控模塊調用的其他模塊(包括可控模塊和/或非可控模塊)中的兩個或更多模塊使用,來確定所述每個可控模塊定義的符號是否是共享符號。確定裝置501可以通過對所述每個可控模塊和所述每個可控模塊調用的其他模塊執行IPA,來分析每個可控模塊定義的符號的使用狀態,即,確定每個可控模塊定義的符號是否被所述每個可控模塊和所述每個可控模塊調用的其他模塊中的兩個或更多模塊使用。確定裝置501執行IPA的方法是本領域公知的,在這里不再贅述。
生成模塊502可以生成指示所述至少一個可控模塊定義的共享符號的符號使用文件(即,上文所述的總符號使用文件)。除了指示所述至少一個可控模塊定義的共享符號以外,所述總符號使用文件還可以包含指示定義所述共享符號的可控模塊的信息以及指示使用所述符號的模塊的信息。生成模塊502可以按照在上文中針對圖2描述的方式來生成所述總符號使用文件,在這里為了避免重復而省略其詳細描述。所述總符號使用文件可以采用任何適當的格式,例如表格、文本文件等。
構建模塊503可以基于所述總符號使用文件重新構建該軟件,使得重新構建后的軟件的可控模塊中的符號表僅包含所述符號使用文件中指示的共享符號。
圖6示出了構建模塊503的結構。如圖6所示,構建模塊503可以包括編譯器5031和鏈接器5032。編譯器5031可以對該軟件的每個可控模塊的源文件進行重新編譯以產生相應的目標文件,其中在所述目標文件中,對所述每個可控模塊中除了所述總符號使用文件中指示的共享符號以外的符號(即,內部符號)設置比所述共享符號更快的訪問方式。例如,編譯器5031在對該軟件的各個可控模塊的源文件進行編譯期間,可以查詢所述總符號使用文件以確定各個可控模塊中的共享符號,然后在編譯產生的目標文件中,對各個可控模塊中的內部符號設置快速訪問方式,而對共享符號設置常規的慢速訪問方式。鏈接器 5032可以接收優化后的目標文件以及所述總符號使用文件,查詢所述總符號使用文件以確定各個可控模塊中的共享符號(以及內部符號),并且在重新鏈接所述目標文件以產生重新構建后的軟件中與所述各個可控模塊對應的可控模塊(可執行文件或共享庫)期間,在所述對應的可控模塊的符號表中隱藏所述內部符號,即,不將所述內部符號生成到重新構建后的軟件中的可控模塊的符號表中,使得所述可控模塊的符號表僅包含所述總符號使用文件指示的共享符號。
這樣,在需要時,可以運行重新構建后的軟件,而不再運行原來的軟件。可以看到,利用根據本發明實施例的優化軟件的設備,可以準確地識別軟件中的內部符號和共享符號以減少符號表中的符號數量,從而減少軟件(即,重新構建后的軟件)運行時加載和解析該符號表所耗費的時間,提高軟件的運行效率。而且,由于在重新構建后的軟件中的可控模塊的符號表中隱藏了內部符號,因此可以防止該軟件的實現細節被暴露給外部,提高了軟件的安全性。
本發明可以是系統、方法和/或計算機程序產品。計算機程序產品可以包括計算機可讀存儲介質,其上載有用于使處理器實現本發明的各個方面的計算機可讀程序指令。
計算機可讀存儲介質可以是可以保持和存儲由指令執行設備使用的指令的有形設備。計算機可讀存儲介質例如可以是――但不限于――電存儲設備、磁存儲設備、光存儲設備、電磁存儲設備、半導體存儲設備或者上述的任意合適的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括:便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPROM或閃存)、靜態隨機存取存儲器(SRAM)、便攜式壓縮盤只讀存儲器(CD-ROM)、數字多功能盤(DVD)、記憶棒、軟盤、機械編碼設備、例如其上存儲有指令的打孔卡或凹槽內凸起結構、以及上述的任意合適的組合。這里所使用的計算機可讀存儲介質不被解釋為瞬時信號本身,諸如無線電波或者其他自由傳播的電磁波、通過波導或其他傳輸媒介傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸的電信號。
這里所描述的計算機可讀程序指令可以從計算機可讀存儲介質下載到各個計算/處理設備,或者通過網絡、例如因特網、局域網、廣域網和/或無線網下載到外部計算機或外部存儲設備。網絡可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機、網關計算機和/或邊緣服務器。每個計算/處理設備中的網絡適配卡或者網絡接口從網絡接收計算機可讀程序指令,并轉發 該計算機可讀程序指令,以供存儲在各個計算/處理設備中的計算機可讀存儲介質中。
用于執行本發明操作的計算機程序指令可以是匯編指令、指令集架構(ISA)指令、機器指令、機器相關指令、微代碼、固件指令、狀態設置數據、或者以一種或多種編程語言的任意組合編寫的源代碼或目標代碼,所述編程語言包括面向對象的編程語言—諸如Smalltalk、C++等,以及常規的過程式編程語言—諸如“C”語言或類似的編程語言。計算機可讀程序指令可以完全地在用戶計算機上執行、部分地在用戶計算機上執行、作為一個獨立的軟件包執行、部分在用戶計算機上部分在遠程計算機上執行、或者完全在遠程計算機或服務器上執行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網絡—包括局域網(LAN)或廣域網(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網服務提供商來通過因特網連接)。在一些實施例中,通過利用計算機可讀程序指令的狀態信息來個性化定制電子電路,例如可編程邏輯電路、現場可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執行計算機可讀程序指令,從而實現本發明的各個方面。
這里參照根據本發明實施例的方法、裝置(系統)和計算機程序產品的流程圖和/或框圖描述了本發明的各個方面。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機可讀程序指令實現。
這些計算機可讀程序指令可以提供給通用計算機、專用計算機或其它可編程數據處理裝置的處理器,從而生產出一種機器,使得這些指令在通過計算機或其它可編程數據處理裝置的處理器執行時,產生了實現流程圖和/或框圖中的一個或多個方框中規定的功能/動作的裝置。也可以把這些計算機可讀程序指令存儲在計算機可讀存儲介質中,這些指令使得計算機、可編程數據處理裝置和/或其他設備以特定方式工作,從而,存儲有指令的計算機可讀介質則包括一個制造品,其包括實現流程圖和/或框圖中的一個或多個方框中規定的功能/動作的各個方面的指令。
也可以把計算機可讀程序指令加載到計算機、其它可編程數據處理裝置、或其它設備上,使得在計算機、其它可編程數據處理裝置或其它設備上執行一系列操作步驟,以產生計算機實現的過程,從而使得在計算機、其它可編程數據處理裝置、或其它設備上執行的指令實現流程圖和/或框圖中的一個或多個 方框中規定的功能/動作。
附圖中的流程圖和框圖顯示了根據本發明的多個實施例的系統、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個或多個用于實現規定的邏輯功能的可執行指令。在有些作為替換的實現中,方框中所標注的功能也可以以不同于附圖中所標注的順序發生。例如,兩個連續的方框實際上可以基本并行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或動作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。
以上已經描述了本發明的各實施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實施例。在不偏離所說明的各實施例的范圍和精神的情況下,對于本技術領域的普通技術人員來說許多修改和變更都是顯而易見的。本文中所用術語的選擇,旨在最好地解釋各實施例的原理、實際應用或對市場中的技術的技術改進,或者使本技術領域的其它普通技術人員能理解本文披露的各實施例。

關 鍵 詞:
優化 軟件 方法 設備
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:優化軟件的方法和設備.pdf
鏈接地址:http://www.rgyfuv.icu/p-6381401.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
山东11选5中奖结果走势图