当前位置: 技术问答>linux和unix
请教:线程栈的大小问题
来源: 互联网 发布时间:2016-05-06
本文导语: 我在PC下做了一个线程的测试 ulimit -a 看到stack size 是10M。 然后运行自己的线程测试程序,不断回调函数,每次调用函数会建一个2048大小的char buffer,经过测试发现并没有运行满整个10M空间,而是大致在1/4大小的stac...
我在PC下做了一个线程的测试
ulimit -a
看到stack size 是10M。
然后运行自己的线程测试程序,不断回调函数,每次调用函数会建一个2048大小的char buffer,经过测试发现并没有运行满整个10M空间,而是大致在1/4大小的stack size空间时候就出现“段错误”了。
请问这是为什么呢?
ulimit -a
看到stack size 是10M。
然后运行自己的线程测试程序,不断回调函数,每次调用函数会建一个2048大小的char buffer,经过测试发现并没有运行满整个10M空间,而是大致在1/4大小的stack size空间时候就出现“段错误”了。
请问这是为什么呢?
|
我的机器上说是有8MB栈。测试结果也是接近8MB的。没问题啊。测试代码如下:
#include
char *bottom = 0;
void Test(int id)
{
char buf[1024];
printf("Stack Size : %dn", bottom - buf);
Test(id + 1);
}
int main()
{
int a;
bottom = (char*)&a;
Test(1);
return 0;
}
#include
char *bottom = 0;
void Test(int id)
{
char buf[1024];
printf("Stack Size : %dn", bottom - buf);
Test(id + 1);
}
int main()
{
int a;
bottom = (char*)&a;
Test(1);
return 0;
}
|
#include
#include
#include
#include
#include
pthread_attr_t attr;
void *
get_stack(void *arg)
{
size_t stack_size;
void *stack_addr;
pthread_attr_getstacksize(&attr, &stack_size);
printf("stack size = %dn", stack_size);
}
int
main(int argc, char **argv)
{
pthread_t tid;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
if (pthread_create(&tid, &attr, get_stack, (void *)tid) != 0) {
perror("pthread_create error");
exit(1);
}
pthread_join(tid, NULL);
pthread_attr_destroy(&attr);
return 0;
}