beginthread中的堆栈大小参数

时间:2012-10-17 16:36:41

标签: c++ windows multithreading winapi beginthread

我以为我知道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;
}

我确定我正在构建调试模式,因此不会优化调用和数组。

1 个答案:

答案 0 :(得分:0)

预留堆栈大小通常非常大......类似于Windows中的1MB和Linux中的8MB。请注意,这与提交大小不同,提交大小是它开始的地方,通常是4KB的行。堆栈将自动增长到保留大小。另请注意,在具有大量保留堆栈的32位系统上,使用几百个线程可以相当快地耗尽虚拟地址空间(因此,如果需要,可以使用Windows链接属性或Linux ulimit调整此值)。最后,对于大型对象,无论如何我都建议使用堆。