本篇 ShengYu 介紹 C/C++ Linux/Unix 執行緒 pthread_attr_getstacksize()
用法,pthread_attr_getstacksize()
是用來取得該執行緒的堆疊大小。
pthread_attr_getstacksize 基本用法
在 pthread_create()
建立執行緒時沒有設定堆疊大小的話會採用系統的預設值,在 shell 下輸入 ulimit -s
就可以看到目前系統的設定值,單位為 KB,如下所示目前數值為 8192KB,也就是 8M,也可以透過 ulimit 來改變系統預設的 stack size 大小。1
2$ ulimit -s
8192
這邊介紹透過 pthread_attr_getstacksize 來取得執行緒的 stack 堆疊大小。
pthread 堆疊最小值定義為 PTHREAD_STACK_MIN,也就是 16384bytes。
以下簡單示範如何使用 pthread_attr_getstacksize()
,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28// g++ cpp-pthread_attr_getstacksize.cpp -o a.out -pthread
int main() {
pthread_attr_t attr;
int ret;
size_t stacksize;
ret = pthread_attr_init(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_init\n");
}
ret = pthread_attr_getstacksize(&attr, &stacksize);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_getstacksize\n");
}
printf("stack size: %lu\n", stacksize);
ret = pthread_attr_destroy(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_destroy\n");
}
return 0;
}
輸出如下,1
stack size: 8388608
設定 stack size 後再取得 stack size
這邊示範先設定 stack size 後再試著取得 stack size 看看跟設定的是否一致,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38// g++ cpp-pthread_attr_getstacksize2.cpp -o a.out -pthread
int main() {
pthread_attr_t attr;
int ret;
size_t stacksize;
ret = pthread_attr_init(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_init\n");
}
ret = pthread_attr_getstacksize(&attr, &stacksize);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_getstacksize\n");
}
printf("stack size: %lu\n", stacksize);
ret = pthread_attr_setstacksize(&attr, 96*1024);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_setstacksize\n");
}
ret = pthread_attr_getstacksize(&attr, &stacksize);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_getstacksize\n");
}
printf("stack size: %lu\n", stacksize);
ret = pthread_attr_destroy(&attr);
if (ret != 0) {
fprintf(stderr, "Error: pthread_attr_destroy\n");
}
return 0;
}
輸出如下,1
2stack size: 8388608
stack size: 98304
其它相關文章推薦
C/C++ 新手入門教學懶人包
C/C++ Linux pthread_attr_setstacksize 設定執行緒堆疊大小用法
C/C++ Linux/Unix 讓執行緒跑在指定 CPU 的方法 sched_setaffinity
C/C++ Linux/Unix pthread 建立多執行緒用法與範例
C++ std::thread 建立多執行緒用法與範例