Почему в C++ пространство стека выделяется для объявлений локальных переменных, которые никогда не встречаются в потоке выполнения? Или, если это не определено стандартом C++, почему некоторые компиляторы выделяют пространство стека для объявлений локальных переменных, которые никогда не встречаются в потоке выполнения? Может ли компилятор выделять пространство стека только для объявлений переменных, с которыми сталкивается поток выполнения, и при этом работать?
Чтобы проиллюстрировать это, вызов этой функции в режиме отладки, где переменные chars не встречаются, приводит к переполнению стека:
void f()
{
if (false)
{
char chars[INT_MAX];
}
}