Аргумент размера стека в 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;
}

Я убедился, что я работаю в режиме отладки, поэтому вызовы и массивы не будут оптимизированы.

0

Решение

Размер резервного стека, как правило, довольно большой … примерно 1 МБ в Windows и 8 МБ в Linux. Обратите внимание, что это отличается от размера коммита, с которого он начинается, обычно что-то вроде 4KB. Стек автоматически увеличится до резервного размера. Также обратите внимание, что в 32-разрядных системах с большими резервными стеками вы можете довольно быстро исчерпать виртуальное адресное пространство с помощью нескольких сотен потоков (таким образом, вы можете изменить это при необходимости, используя свойства ссылок Windows или Linux ulimit). Наконец, для больших объектов я бы все равно рекомендовал использовать кучу.

0

Другие решения

Других решений пока нет …