pthread_create()建立執行緒時,若不指定分配堆疊大小,系統會分配預設值,通過命令檢視方法如下:
上面的單位為 kb,所以,執行緒預設堆疊大小為 8m。
也可以在終端下通過 ulimit -s value 用來重新設定 stack 大小。
一般來說,預設堆疊大小為 8388608,堆疊最小為 16384, 單位為位元組。
若採用預設值的話,會導致出現問題,若記憶體不足,則 pthread_create() 會返回 12,其定義如下:
#define eagain 11
#define enomem 12
/* out of memory */
(1)檢視執行緒堆疊大小示例**如下:
#include
#include
#include
//執行緒操作所需標頭檔案
intmain
(void
)//獲取當前的執行緒棧大小
ret =
pthread_attr_getstacksize
(&attr,
&stack_size);if
(ret !=0)
//列印堆疊值
printf
("stack_size = %db, %dk\n"
, stack_size, stack_size/
1024);
return0;
(2)設定執行緒堆疊大小示例**如下:
#include
#include
#include
//執行緒操作所需標頭檔案
intmain
(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);
return0;
}
linux核心 程序棧執行緒棧
程序使用者空間的管理在task struct 的mm struct mm成員中體現,mm中的成員定義了使用者空間的布局情況如圖一。使用者空間的棧起始於stack top,如果設定了pf randomize,則起始點會減少乙個小的隨機量,每個體系結構都必須定義stack top,大多數都設定為task...
程序棧大小 與 執行緒棧大小
結論 1.程序的棧大小是在程序執行的時刻才能指定的,即不是在編譯的時刻決定,也不是鏈結的時刻決定,否則就不會有實驗5的結果 2.程序的棧大小是隨機確定的至少比執行緒的棧要大,但是不到執行緒棧大小的2倍 3.執行緒棧的大小是固定的,也就是ulimit a顯示的值 實驗 我在fc3,gcc3.4.2環境...
程序的使用者棧和核心棧
詳細參考 核心在建立程序的時候,在建立task struct的同時,會為程序建立相應的堆疊。每個程序會有兩個棧,乙個使用者棧,存在於使用者空間,乙個核心棧,存在於核心空間。當程序在使用者空間執行時,cpu堆疊指標暫存器裡面的內容是使用者堆疊位址,使用使用者棧 當程序在核心空間執行時,cpu堆疊指標暫...