关于主线程概念和线程栈大小问题?

yang_jnu 2012-03-15 09:54:25
最近在调试一个程序时发现由于线程的栈空间大于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);
}
上面的程序没有提示出错,有点疑惑。。。
应该是我的某些概念理解错了,求各位指点下....
...全文
314 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yang_jnu 的回复:]
引用 1 楼 lactoferrin 的回复:

主线程就是进程的第一个线程


哪可否理解执行main的就为主线程呢??
[/Quote]
可以这么理解!
yang_jnu 2012-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lactoferrin 的回复:]

主线程就是进程的第一个线程

[/Quote]
哪可否理解执行main的就为主线程呢??
yang_jnu 2012-03-15
  • 打赏
  • 举报
回复
感谢上面两位,之前运行正常确实是编译器优化的问题(用的是ICC 10编译器),换成VC 6默认的编译器就出错了,darkmars2000 提到VS 2008也出错,可能微软的编译器都没优化吧,感谢了.....
darkmars2000 2012-03-15
  • 打赏
  • 举报
回复
vs 2008 运行楼主的代码,存在栈问题
Lactoferrin 2012-03-15
  • 打赏
  • 举报
回复
主线程就是进程的第一个线程

你下面根本没用到那个数组,所以编译器优化时可以去掉

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧