0

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

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

4

1 回答 1

0

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

于 2012-10-17T18:08:43.770 回答