Больше регистров ограничено кодировкой команд. x86-64 использует биты в байте префикса REX для расширения определяющей регистр части команд с 3 до 4 бит для регистров src и dest. Если бы было место, x86-64, вероятно, пошел бы в 32 архитектурных регистра, хотя сохранение / восстановление такого количества переключателей контекста начинает складываться. 15 - огромный шаг вперед по сравнению с 7, но в большинстве случаев 31 - намного меньшее улучшение. (не считая указатель стека как общего назначения.) Быстрое нажатие / выталкивание отлично подходит не только для стековых кадров. Однако это не компромисс с количеством рег.

ичок в ассемблере и заметил, что код x86, генерируемый компиляторами, обычно сохраняет указатель фрейма даже в режиме выпуска / оптимизации, когда он может использоватьEBP зарегистрироваться на что-то еще.

Я понимаю, почему указатель кадра может облегчить отладку кода и может понадобиться, еслиalloca() вызывается внутри функции. Однако x86 имеет очень мало регистров, и использование двух из них для хранения местоположения стекового фрейма, когда этого достаточно, просто не имеет смысла для меня. Почему опускание указателя кадра считается плохой идеей даже в оптимизированных / выпущенных сборках?

Ответы на вопрос(5)

Ваш ответ на вопрос