記憶體管理技巧
1.C/C++工程應儘量避免深複製
,儘量用淺複製
(指標或者引用),如果指標需要頻繁複製,用智慧指標
是一種不錯的選擇
2.啟用記憶體池
管理執行緒的記憶體開銷,事先在堆裡邊分配好,然後快速使用
避免複雜的浮點運算
1.複雜的浮點運算儘量避免,有些晶片是不支援硬體雙精度浮點數
的,比如全志T3
,實在是非用不可,可以用查表的方式加快速度
2.資料傳輸可以用整型資料壓縮減少頻寬,這個在can資料傳輸比較常見
空間換時間
比如一個資料模型
體積很大,載入起來很耗時,可以考慮把它編譯到軟體裡邊去,然後執行的時候提前載入到記憶體
演算法複雜度最佳化
1.時間複雜度,減少迴圈使用次數
2.空間複雜度的角度最佳化
並行框架
openMP
瞭解一下,在關鍵的程式碼段加上omp並行處理
位元組對齊
用好位元組對齊
功能可以最佳化cpu流水線的處理效率
核心態的利用
可以把一些業務操作寫進驅動,利用作業系統的排程最佳化,核心態
和使用者態
哪一個更高效,這個是相對的,得看系統呼叫和庫函式的顆粒度,可以值得嘗試一下
執行緒排程
嘗試調整一些執行緒的優先順序
提高排程效率,另外Linux也允許綁核操作
防禦性程式設計
-
申請一段buffer後總是習慣性的將其內容memset為0,當然這是針對plain型別的資料,防止在資料解析的時候解析到不合法的資料
-
總是習慣性的判斷陣列的邊界
-
申請指標不應該懸空,應該給它一個值或者是nullptr,使用前判斷它是否為空
-