關於執行緒堆疊大小的注意事項

2022-06-21 16:00:11 字數 631 閱讀 8534

以下資料參考部落格關於執行緒堆疊大小的注意事項

每個執行緒獨立擁有乙個可配置大小的堆疊,乙個執行緒內所有函式使用到的堆疊都依賴於這個棧,如果太多的變數、引數需要使用棧,則可能導致棧溢位。目前基礎平台子系統通過配置環境變數,將預設堆疊大小設定為128k,可以減少這個問題的出現,但業務系統在編碼時仍然 需要注意棧的使用,避免出現問題。

包括:

1、不要在函式內部定義過大的區域性變數,如過大的結構體變數,聯合變數,過大的字串,陣列等;

2、函式呼叫的深度也需要注意,如果函式 a 呼叫 b, b 再呼叫 c,而a/b/c每個函式定義了 10 k的區域性變數,則總的棧空間需求將超過 30k;

3、不要直接將大的結構變數通過函式引數傳遞,這樣也會消耗棧空間,可以通過指標或者引用的方式傳遞;

4、建議每個函式內部定義的變數大小控制在4-8k以下;

5、如果在執行中 coredump,並且通過 gdb 的 where 命令時看到剛進入某個函式就報錯,連函式內的第一條除錯語句都無法指向,則基本可以認為是棧空間不夠導致的,可以嘗試將棧空間配置大一點,如果問題不再出現,則可以確定問題。這時需要按照前面幾點的要求修改**,減少棧的使用。

另一篇關於修改執行緒堆疊大小部落格設定執行緒堆疊大小

大小端程式設計注意事項

一般情況下,我們所遇到的都是小端的情況,典型的x86處理器就是小端的。但是,好多powerpc處理器可以被配置為大端模式,也可以被配置為小端模式。所以,經常會出現以前的 執行的好好地,到了新板子,或者板子配置 發生了變化,結果就不對了,而且很難除錯。因為根本不會認為它出錯。下面就舉個我們 中調了好久...

關於new注意事項

file main.cpp author vicky include include include class user user const char username virtual user void sayhello char username 20 int main void 建立乙個u...

關於Cookie注意事項

細節決定成敗,小細節絆住大腳。1.cookie 儲存時 key不能使用分號 逗號 等 號 以及空格。如 設定key為 aa.aspx?id 1 最後儲存的cookie key結果為aa.aspx?id 系統遇到等號時,後面的字串自動擷取掉了。2.同樣,cookie 儲存時 值不能使用分號 逗號 等 ...