-fomit-frame-pointer *всегда* опускает fp?

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


person brooksbp    schedule 16.02.2011    source источник


Ответы (3)


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

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

person Simon Richter    schedule 16.02.2011

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

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

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

person nominolo    schedule 16.02.2011

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

person Necrolis    schedule 16.02.2011