本發(fā)明涉及計算機存儲器領域,具體涉及一種計算程序對存儲器使用情況的方法和裝置。
背景技術:
在軟件開發(fā)過程中,如何合理分配使用存儲器是一個難度較大的工作。通常一個軟件中會包含多個程序模塊,雖然編譯工具會生成某種含有存儲器使用狀況信息的文件,但由于此類文件包含的信息過于繁雜且順序混亂,不便于開發(fā)人員查看。
例如對于嵌入式軟件,嵌入式軟件在編譯后會自動生成一個map文件,雖然map文件中包含完整程序模塊名、程序片斷名,程序片斷起止地址,長度值等存儲器使用情況信息,但由于map文件中的信息過于繁雜,其內容會隨源代碼而變化,所以開發(fā)人員無法識別map文件中的內容,所以則不能清楚地知道各個程序模塊對各類存儲器的使用情況,如果軟件整體對存儲器的使用不合理,而開發(fā)人員又不能確定具體哪些程序模塊存在問題,由此將會降低軟件開發(fā)效率。
技術實現(xiàn)要素:
為了解決現(xiàn)有技術不能清楚地獲得程序中的各個程序模塊對各類存儲器的使用情況的問題,本發(fā)明提供了一種計算程序對存儲器使用情況的方法,所述程序包括至少一個程序模塊,每個所述程序模塊包括至少一個程序片段,所述方法包括:分別獲取每個所述程序模塊的存儲于各個存儲器中的程序片段的長度值;分別對每個所述程序模塊的存儲于相同存儲器的程序片段的長度值求和。
優(yōu)選地,所述程序為嵌入式程序,所述存儲器包括隨機存取存儲器、固定閃存存儲器和分頁閃存存儲器。
優(yōu)選地,所述分別獲取所述程序模塊的存儲于各個存儲器中的程序片段的長度值包括:從所述程序的map文件中獲取各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊的模塊名稱。
優(yōu)選地,在所述從所述程序的map文件中獲取各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊名稱后,還包括:將不同類型信息的程序片的長度值和所屬的程序模塊名稱分別存入不同哈希表中,其中程序模塊名稱為哈希表的key值,長度值為哈希表的value值。
優(yōu)選地,所述分別對所述程序模塊的存儲于相同存儲器的程序片段的長度值求和包括:分別對各個哈希表中的程序模塊名稱對應的長度值進行累加,得到各個程序模塊的各個存儲器使用量。
相應地,本發(fā)明還提供了一種計算程序對存儲器使用情況的裝置,所述程序包括至少一個程序模塊,每個所述程序模塊包括至少一個程序片段,所述裝置包括:獲取單元,用于分別獲取每個所述程序模塊的存儲于各個存儲器中的程序片段的長度值;計算單元,用于分別對每個所述程序模塊的存儲于相同存儲器的程序片段的長度值求和。
優(yōu)選地,所述程序為嵌入式程序,所述存儲器包括隨機存取存儲器、固定閃存存儲器和分頁閃存存儲器。
優(yōu)選地,所述獲取單元包括:獲取子單元,用于從所述程序的map文件中獲取各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊的模塊名稱。
優(yōu)選地,所述獲取單元包括:存儲子單元,用于將不同類型信息的程序片的長度值和所屬程序模塊名稱分別存入不同哈希表中,其中程序模塊名稱為哈希表的key值,長度值為哈希表的value值。
優(yōu)選地,所述計算單元包括:哈希表計算子單元,用于分別對各個哈希表中的程序模塊名稱對應的長度值進行累加,得到各個程序模塊的各個存儲器使用量。
根據(jù)本發(fā)明提供的計算程序對存儲器使用情況的方法和裝置,通過分別對各個程序模塊的存儲于相同存儲器的程序片段的長度值求和,可以得到計算機程序的各個程序模塊對各種存儲器的使用量,從而使軟件開發(fā)人員了解各個程序模塊的存儲器的使用狀況,并可以根據(jù)計算結果判斷各個程序模塊對存儲器的使用情況是否合理,進而完善各對存儲器的分配和使用,由此可以提高軟件開發(fā)效率。
附圖說明
為了使本發(fā)明的內容更容易被清楚的理解,下面根據(jù)本發(fā)明的具體實施例并結合附圖,對本發(fā)明作進一步詳細的說明,其中
圖1是根據(jù)本發(fā)明實施例的計算程序對存儲器使用情況的方法的流程圖;
圖2是根據(jù)本發(fā)明實施例的計算程序對存儲器使用情況的方法的具體流程圖;
圖3是根據(jù)本發(fā)明實施例的計算程序對存儲器使用情況的裝置的結構圖。
具體實施方式
計算機程序通常包括至少一個程序模塊,且每個程序模塊包括至少一個程序片段,程序片段存儲于多種存儲器中。本發(fā)明實施例提供一種計算程序對存儲器使用情況的方法,為了清楚地說明該方法,在此以一個簡單的計算機程序為例,例如某計算機程序有2個程序模塊:模塊A和模塊B,模塊A有2個程序片段a1和b1,模塊B有2個程序片段a2和b2,如圖1所示該方法包括:
S1,分別獲取程序模塊的存儲于各個存儲器中的程序片段的長度值,上述程序模塊名稱、程序片段名稱和長度值以及每個程序片段具體屬于哪一個程序模塊、程序片段具體存儲在哪個村存儲器中等信息,均可以從軟件的編譯工具生成的文件中獲取。例如可以獲取程序模塊A的程序片段a1的長度值x1和程序片段b1的長度值x2、獲取程序模塊B的程序片段a2的長度值x3 和程序片段b2的長度值x4。
S2,分別對程序模塊的存儲于相同存儲器的程序片段的長度值求和,以得到各個程序模塊對各種存儲器的使用量。假設程序片段a1和程序片段b1均存儲于存儲器a中,程序片段a2和程序片段b2均存儲于存儲器b中,則可以計算長度值x1和長度值x2的和,得到程序模塊A對存儲器a的使用量Y1,計算長度值x3和長度值x4的和,得到程序模塊B對存儲器b的使用量Y2。本領域技術人員可以理解,上述情況只是為了清楚地說明本方法的原理所列舉的簡單情況,實際情況中,程序片段的存儲情況十分復雜,一個程序模塊的多個程序片段可能分別存儲于多個不同的存儲器中,即程序模塊A可能同時使用了存儲器a和存儲器b,對于此種情況,按照上述方法可以得到程序模塊A對存儲器a的使用量和對存儲器b的使用量。
根據(jù)本發(fā)明實施例的方法,通過分別對各個程序模塊的存儲于相同存儲器的程序片段的長度值求和,可以得到計算機程序的各個程序模塊對各種存儲器的使用量,從而使軟件開發(fā)人員了解各個程序模塊的存儲器的使用狀況,并可以根據(jù)計算結果判斷各個程序模塊對存儲器的使用情況是否合理,進而完善各對存儲器的分配和使用,由此可以提高軟件開發(fā)效率。
在得到各個程序模塊對各個存儲器的使用量后,該方法還可以包括:
S3,利用上述各個程序模塊對各種存儲器的使用量計算存儲器的宏觀使用信息,例如,對Y1和Y2求和,得到各個存儲器的總使用量,用各個存儲器的總容量減去上述總使用量得到總空余量,用總空余量除以總使用量得出各存儲器的總使用率。
上述方法特別適用于計算嵌入式軟件的處理器使用情況,嵌入式軟件使用的存儲器包括:隨機存儲器(RAM)、固定閃存(FLASH)存儲器存儲器和分頁閃存(FLASH)存儲器。假設某嵌入式軟件有3個程序模塊:模塊A、模塊B和模塊C。優(yōu)選地,如圖2所示上述步驟S1具體可以包括如下子步驟:
S11,從map文件中獲取各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊的模塊名稱。具體可以利用腳本命令(例如在makefile文件中添加perl腳本命令),根據(jù)關鍵字從map文件中可以提取出以下信息:
模塊A有2個程序片段:片段a1,長度值為x1,存儲于RAM存儲器;片段b1,長度值為x2,存儲于RAM存儲器;
模塊B有2個程序片段:片段a2,長度值為x3,存儲于固定FLASH存儲器;片段b2,長度值為x4,存儲于固定FLASH存儲器;
模塊C有3個程序片段:片段a3,長度值為x5,存儲于固定FLASH存儲器;片段b3,長度值為x6,存儲于分頁FLASH存儲器;片段c3,長度值為x7,存儲于分頁FLASH存儲器;
上述方案可以通過現(xiàn)有的map文件得到各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊的模塊名稱,該方案易于實現(xiàn),且準確性較高。
為了對各個長度值進行進一步的計算,還可以包括:
S12,將不同類型信息的程序片的長度值和所屬的程序模塊名稱分別存入不同哈希表中,其中程序模塊名稱為哈希表的key值,長度值為哈希表的value值,例如將類型信息為RAM的程序片的長度值和所屬程序模塊名稱段存入RAM哈希表中,則RAM哈希表中有如下信息:
Key值:模塊a,對應該key值的有2個value值:x1、x2;
將類型信息為固定FLASH的程序片段的長度值和所屬程序模塊名稱存入固定FLASH哈希表中,則固定FLASH哈希表中有如下信息:
Key值:模塊b,對應該key值的有2個value值:x3、x4;
Key值:模塊c,對應該key值的有1個value值:x5;
將類型信息為分頁FLASH的程序片段的長度值和所屬程序模塊名稱存入分頁FLASH哈希表中,則分頁FLASH哈希表中有如下信息:
Key值:模塊c,對應該key值的有2個value值:x6、x7。
上述方案利用哈希表數(shù)據(jù)結構對提取出的信息進行存儲,按照上述方案存儲的數(shù)據(jù)便于查找,可以提高后續(xù)步驟中的對程序模塊對存儲器使用量的計算操作的速度和效率。
作為一個優(yōu)選的實施方式,上述S2可以包括:
S21,分別對各個哈希表中的程序模塊名稱對應的長度值進行累加,得到 各個程序模塊的各個存儲器使用量,具體可以是:
對RAM哈希表中與模塊a對應的value進行求和,得到模塊a對RAM存儲器的使用量,即x1+x2。本實施例中只有模塊a使用了RAM存儲器,所以上述RAM哈希表中只有一個key值,而實際情況中可能有多個模塊使用RAM存儲器,所以RAM哈希表中可能有多個key值,每個key值均對應至少一個value,所以應當分別對RAM哈希表中的程序模塊名稱對應的長度值進行累加,得到各個程序模塊的RAM使用量;
對固定FLASH哈希表中與模塊b對應的value進行求和,得到模塊b對RAM存儲器的使用量,即x3+x4;對固定FLASH哈希表中與模塊c對應的value進行求和,得到模塊c對固定FLASH存儲器的使用量,即x5。本實施例中的模塊b和模塊c使用了固定FLASH存儲器,所以上述固定FLASH哈希表中又2個key值,并分別對應有value值。所以本步驟是分別對固定FLASH哈希表中的程序模塊名稱對應的長度值進行累加,得到各個程序模塊的固定FLASH存儲器使用量;
對分頁FLASH哈希表中與模塊c對應的value進行求和,得到模塊c對RAM存儲器的使用量,即x6+x7。本實施例中只有模塊c使用了分頁FLASH存儲器,所以上述分頁FLASH哈希表中只有一個key值,而實際情況中可能有多個模塊使用分頁FLASH存儲器,所以分頁FLASH哈希表中可能有多個key值,每個key值均對應至少一個value,所以應當分別對分頁FLASH哈希表中的各個程序模塊名稱對應的長度值進行累加,得到各個程序模塊的分頁FLASH使用量;
上述固定FLASH使用量和分頁FLASH使用量均屬于FLASH存儲器使用量,當FLASH的大小超出微控制器的可尋址空間大小時,通常采用分頁機制對FLASH進行尋址。所以FLASH中采用了分頁機制的部分叫做分頁FLASH,未采用FLASH的部分叫做固定FLASH,為了計算出各個程序模塊的FLASH存儲器使用量,還可以包括如下步驟:
分別對程序模塊的固定FLASH使用量和程序模塊的分頁FLASH使用量相加,得到各個程序模塊的FLASH使用量。例如上述模塊c使用了固定FLASH 存儲器和分頁FLASH存儲器,利用上述固定FLASH哈希表和分頁FLASH哈希表可以計算出,模塊c的FLASH使用量為X5+x6+x7。
本領域技術人員可以理解,本發(fā)明不限于計算上述三種存儲器的使用情況,計算更多或更少的存儲器的使用情況都是可行的,只需要每個存儲器對應一種哈希表即可實現(xiàn)本發(fā)明的目的。
上述方案利用哈希表計算出嵌入式軟件中的各個程序模塊對各種存儲器的使用情況,其計算速度快,計算效率較高。
計算出上述各種存儲器的使用情況之后,可以利用腳本指令使上述計算結果按照腳本指令所指示的排序方式進行顯示,例如可以按照程序模塊名稱排序、按照RAM使用量排序、按照FLASH使用量排序等。
例如按照程序模塊名稱排序時,可以采用如下優(yōu)先級順序:
1.模塊名稱;2.FLASH使用量;3.固定FLASH使用量;4.分頁FLASH使用量;5.RAM使用量。具體顯示結果:
由此軟件開發(fā)人員可以以所需排序方式對程序模塊排序,方便軟件開發(fā)人員快速找到所需模塊的存儲器使用信息。
本發(fā)明的另一個實施例還提供一種計算程序對存儲器使用情況的裝置,如圖3所示該裝置包括:
獲取單元21,用于分別獲取每個程序模塊的存儲于各個存儲器中的程序片段的長度值;
計算單元22,用于分別對每個程序模塊的存儲于相同存儲器的程序片段的長度值求和。
如上所述,該程序可以是嵌入式程序,存儲器可以包括隨機存取存儲器、固定閃存存儲器和分頁閃存存儲器。
根據(jù)本發(fā)明實施例的裝置,通過分別對各個程序模塊的存儲于相同存儲 器的程序片段的長度值求和,可以得到計算機程序的各個程序模塊對各種存儲器的使用量,從而使軟件開發(fā)人員了解各個程序模塊的存儲器的使用狀況,并可以根據(jù)計算結果判斷各個程序模塊對存儲器的使用情況是否合理,進而完善各對存儲器的分配和使用,由此可以提高軟件開發(fā)效率。
如上所述,獲取單元21可以包括:
獲取子單元211,用于從程序的map文件中獲取各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊的模塊名稱。
上述方案可以通過現(xiàn)有的map文件得到各個程序片段所位于的存儲器的類型信息、長度值和所屬程序模塊的模塊名稱,該方案易于實現(xiàn),且準確性較高。
優(yōu)選地,獲取單元21還可以包括:
存儲子單元212,用于將不同類型信息的程序片的長度值和所屬程序模塊名稱分別存入不同哈希表中,其中程序模塊名稱為哈希表的key值,長度值為哈希表的value值。
上述方案利用哈希表數(shù)據(jù)結構對提取出的信息進行存儲,按照上述方案存儲的數(shù)據(jù)便于查找,可以提高后續(xù)步驟中的對程序模塊對存儲器使用量的計算操作的速度和效率。
優(yōu)選地,計算單元22可以包括:
哈希表計算子單元221,用于分別對各個哈希表中的程序模塊名稱對應的長度值進行累加,得到各個程序模塊的各個存儲器使用量。
上述方案利用哈希表計算出嵌入式軟件中的各個程序模塊對各種存儲器的使用情況,其計算速度快,計算效率較高
顯然,上述實施例僅僅是為清楚地說明所作的舉例,而并非對實施方式的限定。對于所屬領域的普通技術人員來說,在上述說明的基礎上還可以做出其它不同形式的變化或變動。這里無需也無法對所有的實施方式予以窮舉。而由此所引伸出的顯而易見的變化或變動仍處于本發(fā)明創(chuàng)造的保護范圍之中。