記憶體篇之程式記憶體消耗評價指標
阿新 • • 發佈:2019-01-10
嵌入式軟體除CPU佔用率或者說執行速度外,記憶體方面還有三大量化評價標準,即ROM size, Peak memory occupation和 max stack depth,雖然不屬於什麼官方標準,但這三點的確綜合反映了程式記憶體佔用方面的整體指標。
rom size既不是指exe檔案大小,也不是lib檔案大小,而是目標檔案中有效二進位制段大小。exe和lib檔案中都有一些輔助段,如檔案頭/載入資訊/符號表等,這些段在最終進駐系統RAM的過程中一般會被剔除。因此統計模組的ROM size大小要用二進位制工具(如gcc中的ar或objdump等toolchain)分析,累加“程式碼段”+“資料段”等有效的記憶體佔用段,得到最終結果。
ROM size與編譯器及其編譯選項有一定相關性,同樣的程式碼由不同的編譯器編譯,最終獲得的純粹二進位制程式碼大小會有一定差別。如C優化篇提到空間換時間的迴圈展開就是增大ROM size換取速度的提高。
peak memory occupation是指模組內不斷malloc 與free的過程中,動態堆記憶體消耗的最高點,這個指標代表了模組對記憶體的需求。注意這是一個動態過程,並不是將程式碼中所有malloc的記憶體大小相加的值,可對照理解記憶體洩漏中的隱式洩漏。
max stack depth是指整個模組執行過程中所進入的最大棧深度。軟體執行中不停進出函式,同時也會不停壓棧和出棧,在這個動態過程中觸及的最大棧記憶體的深度代表了模組對系統棧段最小容量的要求。在程式由PC 移植到嵌入式系統時要特別注意這個指標,往往要消除一些函式內部區域性大陣列來降低棧深度,滿足嵌入式平臺的要求。可參見棧溢位。