Исправление alysnix, (текущая версия) :
Во-вторых каждый раз это новый фрейм, т.е. дополнительные инструкции для его создания.
есть только фрейм функции. компилятор считает(по крайнер мере может делать так) - самый длинный фрейм функции с учетом деклараций во внутренних блоках, и генерит его на входе в функцию.
типа
void fun(int fx) {
int x;
{ //первый блок
int y,z;
}
{ //второй блок
int y;
}
}
тут самый длинный фрейм - x,y,z. вот такой фрейм и будет создан при входе в функцию. и никакой ерунды с расширением фрейма при входе в блок не надо. и выходе тоже.
особенно если все рагистрах - просто во втором блоке будут использоваться регистры, где хранились переменные от первого блока
Исходная версия alysnix, :
Во-вторых каждый раз это новый фрейм, т.е. дополнительные инструкции для его создания.
есть только фрейм функции. компилятор считает(по крайнер мере может делать так) - самый длинный фрейм функции с учетом деклараций во внутренних блоках, и генерит его на входе в функцию.
типа
void fun(int fx) { int x; { //первый блок int y,z; } { //второй блок int y; } }
тут самый длинный фрейм - x,y,z. вот такой фрейм и будет создан при входе в функцию. и никакой ерунды с расширением фрейма при входе в блок не надо. и выходе тоже.
особенно если все рагистрах - просто во втором блоке будут использоваться регистры, где хранились переменные от первого блока