POSIX thread的 stack大小設定

2021-06-18 07:26:21 字數 1608 閱讀 6087

在嵌入式系統中,為了減少記憶體的占用,有時候需要設定執行緒的 stack 大小(因為預設的大小過大)。

下面這段**首先讀出系統預設的stack 大小,然後重新設定乙個大小,再重新讀出來。

#include #include #include #include void *foo(void *arg)

int main(int argc, char ** argv)

pthread_attr_init(&attr);

pthread_attr_getstacksize(&attr, &size);

printf("the default pthread stack size: %dk\n", size/1024);

size = atoi(argv[1]);

if( pthread_attr_setstacksize(&attr, size) != 0)

pthread_create(&id, &attr, foo, null);

pthread_join(id, null);

pthread_attr_destroy(&attr);

return 0;

}

執行命令 gcc -g -pthread getstacksize.c -lpthread

,然後,試著輸入幾個stack size:

$ ./a.out  1024

the default pthread stack size: 8192k

set stack size error

get stack size : 8192k

charles@taotao:~$ ./a.out 262144

the default pthread stack size: 8192k

get stack size : 8192k

charles@taotao:~$ ./a.out 2097152

the default pthread stack size: 8192k

get stack size : 8192k

第一次設定 1024 (1k)失敗,stack size為預設的  8m (8192k).

第二次設定 262144(256k)成功,但是 stack size還是 8m.

第三次同樣。

為什麼設定的stack size沒有正確返回呢?

今天重新看了下這個問題,發現是對函式 pthread_attr_init()的使用有問題。

這個函式會對傳入的 pthread_attr_t變數初始化,其中會把 stack size設為0.

而 pthread_attr_getstacksize函式會判斷 傳入的 attr的stack size,如果為0,使用系統預設的stack size.

int

__pthread_attr_getstacksize (attr, stacksize)

const pthread_attr_t *attr;

size_t *stacksize;

*stacksize = size;

return 0;

}

git stash clear 以後找回stash

首先輸入 git fsck lost found 會看到 一條一條的記錄 類似 dangling commit 7010e0447be96627fde29961d420d887533d7796 複製dangling commit 的id 其他的dangling blob不用理會 然後輸入 git s...

STA分析 三 cmos模型

cmos積體電路的基本結構是以p型材料作為襯底 p substrate 直接生成nmos,同時增加n肼 n well 在其上製造pmos。增加兩個bulk p n 防止非mos管內的pn結反偏。nmos一般放在pull down結構中,pmos一般放在pull up結構中。nmos與pmos均採用增...

STA和MTA執行緒模式的區別

sta和mta執行緒模式的區別 摘錄 by 饅頭販子 發表於 2010 5 20 14 36 00 sta single thread apartment,中文叫單執行緒套間。就是在com庫初始化的時候建立乙個記憶體結構,然後讓它和呼叫coinitialize的執行緒相關聯。這個記憶體結構針對每個執...