В чем преимущества fomit-frame-pointer?

-fomit-frame-pointer означает, что нам не нужно нажимать %rbp и перемещать %rsp, %rbp; нам нужно только изменить значение %rsp. Насколько я думаю, фрейм стека, работающий с базовым указателем, и фрейм стека без него не имеют различий с точки зрения преимуществ. Не могли бы вы объяснить, какие преимущества имеет stack-frame без работы с %ebp?


person 주혜민    schedule 11.10.2020    source источник
comment
Генератор кода теперь может использовать ebp в качестве регистра общего назначения, что повышает эффективность устаревшего 32-битного кода. Это не часто используется, это делает код очень трудным для отладки, поскольку трассировка стека теперь может быть точно сгенерирована только с метаданными отладки.   -  person Hans Passant    schedule 11.10.2020
comment
Он действительно используется очень часто, так как, по крайней мере, gcc включает его с помощью -O2 автоматически.   -  person Jester    schedule 11.10.2020
comment
@HansPassant: он включен по умолчанию, когда включена оптимизация, даже для 32-битного кода в GCC уже несколько лет; Я бы не сказал, что он не используется часто. Он всегда был включен по умолчанию в коде x86-64; OP также упоминает RBP. Современный Linux (x86-64 System V ABI) обрабатывает метаданные .eh_frame как необходимые, а не как отладочную информацию: он генерирует их по умолчанию и не разделяет их на другие бинарные файлы, даже для C. (Это необходимо для обработки исключений C++ , но не совсем для C, за исключением обратных следов)   -  person Peter Cordes    schedule 11.10.2020