我以为我知道beginthread中的堆栈大小参数意味着什么。所以我的问题是:为什么这样做?
#include <iostream>
#include <process.h>
using namespace std;
void huge_stack(int a, int b, int c, int d)
{
int i[100000] = {0};
cout << a << b << c << d << i[12333] << endl;
}
bool done = false;
void thread(void* p)
{
huge_stack(1,2,3,4);
done = true;
}
int main()
{
_beginthread(thread, 10, nullptr);
while(!done) {}
return 0;
}
我确定我正在构建调试模式,因此不会优化调用和数组。
答案 0 :(得分:0)
预留堆栈大小通常非常大......类似于Windows中的1MB和Linux中的8MB。请注意,这与提交大小不同,提交大小是它开始的地方,通常是4KB的行。堆栈将自动增长到保留大小。另请注意,在具有大量保留堆栈的32位系统上,使用几百个线程可以相当快地耗尽虚拟地址空间(因此,如果需要,可以使用Windows链接属性或Linux ulimit调整此值)。最后,对于大型对象,无论如何我都建议使用堆。