Когда пространство стека выделяется для локальных переменных?
У меня есть вопрос по поводу следующего кода C:
void my_function()
{
int i1;
int j1;
// Do something...
if (check_something())
{
int i2;
int j2;
// Do something else...
}
// Do some more stuff...
}
Существуют ли какие-либо гарантии относительно того, когда пространство стека выделено / освобождено для i2 и j2, или это зависит от компилятора? Я ожидал бы, что указатель стека будет уменьшен, когда i2 и j2 войдут в область видимости, и отрегулирован обратно, когда они выйдут из области видимости, но потом подумал, что некоторые компиляторы могут просто "оптимизировать» все это и учет переменных во вложенной области видимости при первом входе в функцию.
Я знаю, что могу посмотреть на ассемблерный код, сгенерированный моим компилятором, но мне было интересно, можно ли оставить реализацию на усмотрение компилятора.
Спасибо!