之前剛開始工作時,參與做過嵌入式代碼優(yōu)化,除了最基本的函數(shù)實現(xiàn)細節(jié)算法優(yōu)化外,還有一些細節(jié)的處理。當然之前優(yōu)化時,也是借助了分析工具來分析哪些函數(shù)調用頻繁,哪些開銷比較大。對于具體細節(jié)的處理記得不一定全面了,當然也有部分操作在編譯時,工具也有可能自動進行優(yōu)化。
函數(shù)展開
類似inline,減少函數(shù)出棧入棧開銷
結構體比較
相應數(shù)據(jù)結構具有不同的比特位含義,而高位更具有意義,比較時無需將成員一一比較,強轉32/64位格式比較。
相同操作提取
提取相同深度的指針指向,如下A、C、D為指針,E為具體成員操作。
A->C->D->E1,A->C->D->E2,A->C->D->E3... ...則可將A1 = A->C->D,然后使用A1->E1、A1->E2、A1->E3進行替換操作。
消息合并
線程之前多個消息發(fā)送會導致開銷變大,可以合并成單個消息,同時處理多個事情,當然前提是這些事件可進行合并。
時間空間的轉換(動態(tài)申請用靜態(tài)變量替代)
頻繁使用的消息可以改為一次性申請或是靜態(tài)方式,以減少頻繁申請釋放的開銷;而同一邏輯部分可能申請多次的情況,可以采用半靜態(tài)半動態(tài)的方式,可以通過統(tǒng)計經常同時使用的次數(shù)來確定靜態(tài)內存的大小。
寄存器(變量定義)問題
在arm上匯編可以看到當定義uint8 i;for(i = 1; i< 255; i++)時寄存器為32bit,所以在處理8bit數(shù)據(jù)時,需要額外的移位等操作來放置溢出超過8位情況,此時使用uint32定義反而可以減少MIPS開銷。