线程栈

多线程中,每个线程拥有一个独立的栈,该栈是其他线程不能访问的私有资源,

所以存在于该栈中局部变量 是不需要考虑线程同步的问题,但是如果该局部变量是RAII 那就要考虑了。

(线程是和进程共享资源的,可能只有一些很小的独立资源(如程序计数器,一组寄存器和栈),但是dll是堆栈独立的,所以dll里建立的线程可能情况不一样)

void worker()
{
//	char a[4096000];

	char a[1024*924];


	while (true)

	Sleep(5000);

}


int main()
{

	for (int i = 0; i < 100; i++)
	{
	//	worker();
		std::thread t(worker);
		t.detach();
		cout << "thread ok " << i << endl;
	}
	while (true)
	{
		Sleep(1000);
 
	}

	system("pause");

	return 0;
}

从多线程的用途来看,彼此的栈也应该独立,VS中设置页的  堆栈保留大小 指的是 每个线程的栈最大增长大小,默认1M ,上面代码不会栈溢出,因为是每个线程最大1M 所以运行后任务管理器 内存大概是90+MB

每个线程退出后,栈就被释放了。

函数的调用栈也是一样的,

该线程的栈会在函数return后释放,如果是其他线程终止该线程那么不会释放,导致泄露

(A stack is freed when its thread exits. It is not freed if the thread is terminated by another thread.)

关于线程栈大小 的MSDN解释

https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms686774.aspx

 

 

 

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/738170

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值