針對嵌入式SoC應用的C編程優化
13. 編寫簡單易懂的代碼
編譯器擅長創建復雜的優化,比如函數嵌入和在適當的時候循環體展開。但編譯器不擅長簡化代碼,他們不會合并循環或者不用函數嵌入。在源程序中為了支持某些處理器架構進行的手工的循環體展開會降低程序的可移植性,因為這阻止了編譯器自動為其他的處理器架構進行正確的循環體展開和函數嵌入。
14. 避免編寫參數數量可變的函數
如果一定要這么做,使用ANSI標準方法:stdarg.h.。使用數據表替代if-then-else或者switch分支處理。比如考慮下面代碼:
typedef enum { BLUE, GREEN, RED, NCOLORS } COLOR;
替代
switch (c) {
case CASE0: x = 5; break;
case CASE1: x = 10; break;
case CASE2: x = 1; break;
}
使用
static int Mapping[NCOLORS] = { 5, 10, 1 };
...
x = Mapping[c];
15. 依靠libc函數庫(比如:strcpy、strlen、strcmp、bcopy、bzero、memset和memcpy)。這些函數是經過精心優化的。
表1:一些XCC C/C++編譯器優化開關
本文小結
編譯器設計者已經開發了很多復雜的優化功能以使最新的處理器獲得最大的性能,并且他們還在繼續開發更智能的優化算法。應用程序開發人員可以通過使用恰當的編程規則來盡可能多地利用編譯器的這些優化功能。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論