執行緒棧和程序棧

2021-10-06 11:53:48 字數 1732 閱讀 9016

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堆疊指標暫...