pthread_create()建立執行緒時,若不指定分配堆疊大小,系統會分配預設值,通過命令檢視方法如下:
上面的單位為 kb,所以,執行緒預設堆疊大小為 8m。
也可以在終端下通過 ulimit -s value 用來重新設定 stack 大小。
一般來說,預設堆疊大小為 8388608,堆疊最小為 16384, 單位為位元組。在某些嵌入式系統中,如果其記憶體不是很大,若採用預設值的話,會導致出現問題,若記憶體不足,則 pthread_create() 會返回 12,其定義如下:
[cpp]view plain
copy
#define eagain 11
#define enomem 12 /* out of memory */
我們用 pthread_attr_getstacksize() 和 pthread_attr_setstacksize() 的方法來檢視和設定執行緒的堆疊空間。
檢視執行緒堆疊大小示例**如下:
[cpp]view plain
copy
#include
#include
#include //執行緒操作所需標頭檔案
int main(void)
//獲取當前的執行緒棧大小
ret = pthread_attr_getstacksize(&attr, &stack_size);
if(ret != 0)
//列印堆疊值
printf("stack_size = %db, %dk\n", stack_size, stack_size/1024);
return 0;
} 編譯**時,需要加上-lpthread,執行結果如下:
設定執行緒堆疊大小示例**如下:
[cpp]view plain
copy
#include
#include
#include //執行緒操作所需標頭檔案
int main(void)
stack_size = 1024*20; //堆疊大小設定為20k
ret = pthread_attr_setstacksize(&attr, stack_size);//設定執行緒堆疊大小
if(ret != 0)
stack_size = 0;
ret = pthread_attr_getstacksize(&attr, &stack_size);//獲取執行緒堆疊大小
//列印堆疊值
printf("stack_size = %db, %dk\n", stack_size, stack_size/1024);
return 0;
}
執行結果如下:
Linux 多工程式設計 執行緒堆疊大小的使用介紹
pthread create 建立執行緒時,若不指定分配堆疊大小,系統會分配預設值,通過命令檢視方法如下 上面的單位為 kb,所以,執行緒預設堆疊大小為 8m。也可以在終端下通過 ulimit s value 用來重新設定 stack 大小。一般來說,預設堆疊大小為 8388608,堆疊最小為 16...
關於執行緒堆疊大小的注意事項
以下資料參考部落格關於執行緒堆疊大小的注意事項 每個執行緒獨立擁有乙個可配置大小的堆疊,乙個執行緒內所有函式使用到的堆疊都依賴於這個棧,如果太多的變數 引數需要使用棧,則可能導致棧溢位。目前基礎平台子系統通過配置環境變數,將預設堆疊大小設定為128k,可以減少這個問題的出現,但業務系統在編碼時仍然 ...
堆疊的使用
題目描述 堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push乙個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆疊的使用。輸入 對於每組測試資料,第一行是乙個正整數 n,0 輸出 對於每組測試資料,根據其中的命令字元來處理堆疊 並對所有的 a ...