关于主线程概念和线程栈大小问题?
最近在调试一个程序时发现由于线程的栈空间大于windows默认的栈大小1M,导致线程创建失败,从而引起了以下疑惑:
1.主线程的概念
据查资料,进程至少存在一个线程,称为主线程,而进程的执行是由main函数里面开始执行的(抛开运行库的入口函数之类的不说),可否认为执行main函数的即为主线程?
2.线程栈大小
windows默认的线程栈大小为1M(当然可以重新设置大小,此处不讨论),哪么此处的线程包括主线程吗?我做了下测试:
#include <stdio.h>
int main()
{
char max_test[1024*1024*8]; \\8M空间
printf("test");
}
以上程序的8M空间应该是放在栈空间里面的,为何此时不会出错呢?
通常说深的递归引起栈溢出,于是加了个递归:
void test(int n)
{
char max_test[1024*1024*500]; \\500M栈空间
if (n != 0)
test(n - 1);
else
printf("succedd\n");
}
int main()
{
char max_test[1024*1024*8];
test(10);
}
上面的程序没有提示出错,有点疑惑。。。
应该是我的某些概念理解错了,求各位指点下....