LINUX.ORG.RU

История изменений

Исправление 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. вот такой фрейм и будет создан при входе в функцию. и никакой ерунды с расширением фрейма при входе в блок не надо. и выходе тоже.

особенно если все рагистрах - просто во втором блоке будут использоваться регистры, где хранились переменные от первого блока