在嵌入式系統中,為了減少記憶體的占用,有時候需要設定執行緒的 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的執行緒相關聯。這個記憶體結構針對每個執...