Ответ
В Windows размер стека по умолчанию зависит от разрядности приложения и настроек компоновщика. Типичные значения:
- Для 32-битных (x86) исполняемых файлов: 1 МБ.
- Для 64-битных (x64) исполняемых файлов: 2 МБ.
Как с этим работать в C++ проектах:
Размер можно изменить на этапе компоновки. В Visual Studio это делается через свойства проекта: Linker > System > Stack Reserve Size. Или прямо в коде с помощью директивы:
// Установка размера стека в 4 МБ для исполняемого файла
#pragma comment(linker, "/STACK:4194304")
При создании потоков через WinAPI (CreateThread) размер стека задаётся параметром dwStackSize. Для потоков std::thread в MSVC стандартный размер стека также обычно равен 2 МБ для x64, но управлять им напрямую из стандартного C++ нельзя — требуется использовать платформо-специфичные расширения или std::thread с пользовательским атрибутным объектом (что сложно).
Из практики: При разработке высоконагруженных серверов на Windows, где каждый клиентский обработчик работает в отдельном потоке, увеличение лимита стека было критически важным для глубоких цепочек вызовов и работы с большими структурами в стеке фрейма.