包括:
1、不要在函數內部定義過大的局部變量,如過大的結構體變量,聯合變量,過大的字符串,數組等;
2、函數調用的深度也需要注意,如果函數 A 調用 B, B 再調用 C,而A/B/C每個函數定義了 10 K的局部變量,則總的棧空間需求將超過 30K;
3、不要直接將大的結構變量通過函數參數傳遞,這樣也會消耗棧空間,可以通過指針或者引用的方式傳遞;
4、在unit_test/callsvc 目錄下提供了一個 rs 程序,可以 misc16_pkg.h 和 particle_stru.h 中結構局部變量的大小,如果一個函數中使用了這裏邊的結構定義局部變量,可以通過 “rs [變量類型] ”計算總的棧內存需求。建議每個函數內部定義的變量大小控制在4-8K以下;
5、如果在運行中 COREDUMP,並且通過 GDB 的 WHERE 命令時看到剛進入某個函數就報錯,連函數內的第一條調試語句都無法指向,則基本可以認爲是棧空間不夠導致的,可以嘗試將棧空間配置大一點,如果問題不再出現,則可以確定問題。這時需要按照前面幾點的要求修改代碼,減少棧的使用。