時間:2008-03-24 15:06:00來源:mahaiyan
(4)減少或避免執行耗時的操作
應用程序的大量運行時問通常花費在關鍵程序模塊,關鍵模塊往往包含循環或嵌套循環。減少循環中耗時的操作,可以提高程序的執行速度。常見的耗時操作有:輸入/輸出操作、文件訪問、圖形界面操作和系統調用等。其中,如果無法避免文件的讀/寫,那么對文件的訪問將是影響程序運行速度的一大因素。提高文件訪問速度的方法有兩種:一種是采用內存映射文件;另一種是使用內存緩存。
(5)switch語句用法的優化
編程時,對case值按照可能性排序,將最可能發生的情況放在第一個,最不可能的情況放在最后一個,可以提高switch語句塊的執行速度。
(6)循環體的優化
循環體是程序設計和優化的重點,對于一些不需要循環變量參加運算的模塊,可以把它放到循環的外面。對于次數固定的循環體,for循環比while循環效率更高,減計數循環比增計數循環速度快。例如:
實際運行時,每次循環需要在循環體外加兩條指令:一條減法指令(減少循環計數值)和一條條件分支指令。這些指令稱為"循環開銷"。在ARM處理器上,減法指令需要1個周期,條件分支指令需要3個周期,這樣每個循環另加了4個周期的開銷。可以采用循環展開的方法來提高循環運行的速度,即:重復循環主題多次,并按同樣的比例減少循環次數來減小循環的開銷,以增加代碼尺寸。來換取程序的運行速度。。
(7)函數調用
高效的調用函數,盡量限制使用函數的參數個數,不要超過4個。ARM調用時,4個以下的形參通過寄存器傳遞,第5個以上的形參通過存儲器棧傳遞。如果有更多的參數調用,則可將相關的參數組織在一個結構體內,用傳遞結構體指針來代替參數。
(8)內聯函數和內嵌匯編
對性能影響大的重要函數可以使用關鍵字_inline內聯,會省去調用函數的開銷,負面影響是增加了代碼尺寸。程序中對時間要求苛刻的部分可以用內嵌匯編來編寫,通常可以帶來速度上的顯著提高。
(9)查表代替計算
在程序中盡量不進行非常復雜的運算,如浮點數的開方。對于這些消耗時間和資源的運算,可以采用空間換取時間的方法。預先將函數值計算出來,置于程序存儲區中,以后程序運行時直接查表即可,減小了程序執行過程中重復計算的工作量。
(10)使用針對硬件優化的函數庫
Intel公司為XScale處理器設計的GPP(Graphics Performance Primitives library)/IPP(Integrated Perform-ance Primitives library)庫,針對多媒體處理、圖形處理和數值運算的一些典型操作和算法進行了手工優化,可以很好地發揮XScale硬件的計算潛能,達到很高的執行效率。
(11)利用硬件特性
為了提高程序的運行效率,要充分利用硬件特性來減小其運行開銷,例如減少中斷次數、利用DMA傳輸方式等。
CPU對各種存儲器的訪問速度排序依次為:CPU內部RAM>外部同步RAM>外部異步RAM>Flash/ROM。對于已經燒錄在Flash或ROM中的程序代碼,如果讓CPU直接從中讀取代碼執行,運行速度較慢,則可在系統啟動后將Flash或ROM中的目標代碼拷貝至RAM中后執行,以提高程序的運行速度。
4 結論
嵌入式程序的性能優化與軟件的開發周期、開發成本、軟件的可讀性之聞通常存在矛盾。
要權衡利弊,作出折中的選擇。將算法和數據結構優化作為首選優化技術;然后根據功能、性能差異和投資預算等因素選擇高效的編譯器、系統運行庫和圖形庫;使用性能監測工具偵測占主要運行時間的程序熱點,采用代碼優化手段對其進行優化;最后使用高效的編譯器進行編譯優化,從而得到高質量的代碼。標簽:
傳動網版權與免責聲明:凡本網注明[來源:傳動網]的所有文字、圖片、音視和視頻文件,版權均為傳動網(www.cdcst56.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-09-08
2025-08-06
2025-07-08
2025-06-30
2025-06-16
2025-06-09