Всегда ли -fomit-frame-pointer * пропускает fp? - PullRequest
2 голосов
/ 16 февраля 2011

Всегда ли -fomit-frame-pointer пропускать указатель кадра?Есть ли когда-нибудь ситуация, когда нужно настроить и ПК, и fp?Вызывает ли динамический рост стека настройку fp?Запрашиваемая специально для MIPS32.Спасибо!

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Указатель кадра на самом деле не нужен для правильного выполнения, за исключением случая, когда исключение разворачивается. Для динамического роста стека обычно требуется какой-то указатель кадра, но он не привязан к конкретному регистру, а распределен посредством обычного анализа потока данных.

По сути, -fomit-frame-pointer переводит FP из фиксированного назначения регистра в псевдорегистр и делает инициализацию подлежащей удалению из мертвого хранилища. Так что ответ на первый вопрос - нет, он не всегда опускается.

1 голос
/ 16 февраля 2011

Нет, указатель кадра обычно не нужен. Компилятор может обращаться к локальным переменным относительно указателя стека и не нуждается в специальном указателе кадра.

Тем не менее, стандартная последовательность установки указателя кадра может помочь при отладке сбойной программы (даже если она не скомпилирована с -g), потому что отладчик может использовать информацию указателя кадра для восстановления стека вызовов. Без указателя кадра у него нет информации, чтобы выяснить, где начинается один кадр стека, а где заканчивается следующий.

Итак, при использовании -fomit-frame-pointer вы торгуете производительностью ради гораздо более сложной отладки в случае сбоя. Если критически важные для вашего кода части представляют собой небольшие циклы и не вызывают никаких функций, то пропуск указателя кадра также не принесет большого преимущества.

0 голосов
/ 16 февраля 2011

Не сложный человек, но что-то, что должно применяться к любой системе: если стек должен быть выровнен в любой точке, для хранения исходного указателя потребуется кадр (так как адрес стека и выравнивание могут не совпадать)знаю)

...