我正在尝试调试一些有关堆栈使用的代码。我制作了以下测试程序(只是作为一个例子来弄清楚 pthread 库是如何工作的):
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdio.h>
static void *threadFunc1(void *arg)
{
char arr[5000];
printf("Hello fromt threadFunc1 address of arr:%p\n", &arr);
return;
}
static void *threadFunc2(void *arg)
{
char arr[10000];
printf("Hello fromt threadFunc2 adress of arr:%p\n", &arr);
return;
}
int main(int argc, char *argv[])
{
pthread_t t1,t2;
pthread_attr_t thread_attr;
void *res;
int s;
size_t tmp_size=0;
s=pthread_attr_init(&thread_attr);
assert(s==0);
s=pthread_attr_setstacksize(&thread_attr , PTHREAD_STACK_MIN );
assert(s==0);
s=pthread_attr_getstacksize(&thread_attr , &tmp_size );
assert(s==0);
printf("forced stack size of pthread is:%zd\n", tmp_size);
printf("sizeof char is %zd\n", sizeof(char));
s = pthread_create(&t1, &thread_attr, threadFunc1, NULL);
assert(s==0);
sleep(1);
s = pthread_create(&t2, &thread_attr, threadFunc2, NULL);
assert(s==0);
sleep(1);
printf("Main done()\n");
exit(0);
}
当我执行它时,我得到以下输出(在我的 x86_64 Ubuntu 上):
forced stack size of pthread is:16384
sizeof char is 1
Hello fromt threadFunc1 address of arr:0x7fef350d3b50
Segmentation fault (core dumped)
当我进入新创建的线程时,有没有办法知道请求的 PTHREAD_STACK_MIN 还剩下多少?如果我在输入线程函数时更改 char 数组的大小,似乎限制在 7000 到 8000 之间,这不是我所期望的(在 16384 附近的某个地方)。