Почему в C++ пространство стека выделяется для объявлений локальных переменных, которые никогда не встречаются в потоке выполнения?

Почему в C++ пространство стека выделяется для объявлений локальных переменных, которые никогда не встречаются в потоке выполнения? Или, если это не определено стандартом C++, почему некоторые компиляторы выделяют пространство стека для объявлений локальных переменных, которые никогда не встречаются в потоке выполнения? Может ли компилятор выделять пространство стека только для объявлений переменных, с которыми сталкивается поток выполнения, и при этом работать?

Чтобы проиллюстрировать это, вызов этой функции в режиме отладки, где переменные chars не встречаются, приводит к переполнению стека:

void f()
{
    if (false)
    {
        char chars[INT_MAX];
    }
}
7
задан Neil Justice 12 April 2012 в 16:42
поделиться