執行緒堆疊大小的使用介紹

2021-09-05 10:53:48 字數 1697 閱讀 9554

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 ...