嵌入式程式碼最佳化技巧

hywing發表於2024-06-08

記憶體管理技巧

1.C/C++工程應儘量避免深複製,儘量用淺複製(指標或者引用),如果指標需要頻繁複製,用智慧指標是一種不錯的選擇

2.啟用記憶體池管理執行緒的記憶體開銷,事先在堆裡邊分配好,然後快速使用

避免複雜的浮點運算

1.複雜的浮點運算儘量避免,有些晶片是不支援硬體雙精度浮點數的,比如全志T3,實在是非用不可,可以用查表的方式加快速度

2.資料傳輸可以用整型資料壓縮減少頻寬,這個在can資料傳輸比較常見

空間換時間

比如一個資料模型體積很大,載入起來很耗時,可以考慮把它編譯到軟體裡邊去,然後執行的時候提前載入到記憶體

演算法複雜度最佳化

1.時間複雜度,減少迴圈使用次數

2.空間複雜度的角度最佳化

並行框架

openMP瞭解一下,在關鍵的程式碼段加上omp並行處理

位元組對齊

用好位元組對齊功能可以最佳化cpu流水線的處理效率

核心態的利用

可以把一些業務操作寫進驅動,利用作業系統的排程最佳化,核心態使用者態哪一個更高效,這個是相對的,得看系統呼叫和庫函式的顆粒度,可以值得嘗試一下

執行緒排程

嘗試調整一些執行緒的優先順序提高排程效率,另外Linux也允許綁核操作

防禦性程式設計

  • 申請一段buffer後總是習慣性的將其內容memset為0,當然這是針對plain型別的資料,防止在資料解析的時候解析到不合法的資料

  • 總是習慣性的判斷陣列的邊界

  • 申請指標不應該懸空,應該給它一個值或者是nullptr,使用前判斷它是否為空

  • 巧用斷言

相關文章