-fno-omit-frame-pointer без оптимизации

Мне было интересно, что -fno-omit-frame-pointer будет делать без оптимизации?

CXXFLAGS = -Wall -ggdb3 -DDEBUG -fno-omit-frame-pointer

Разве не автоматически включается fomit-frame-pointer на всех уровнях -O (кроме -O0)? Я предполагаю, что в моем примере это -O0 по умолчанию.

Спасибо и привет!


person Tim    schedule 27.08.2009    source источник
comment
на x86 и семействе -fomit-frame-pointer не включено по умолчанию для более высоких уровней оптимизации, поскольку это может затруднить отладку.   -  person Evan Teran    schedule 27.08.2009
comment
Обратите внимание, что в таких архитектурах, как x86-64 и arm, указатель кадра не создается по умолчанию (это указано в ABI), поэтому этот параметр заставит компилятор создать регистр указателя кадра.   -  person Ted Mielczarek    schedule 07.06.2011


Ответы (2)


Как вы уже сами подразумеваете, -fno-omit-frame-pointer просто игнорируется в вашем случае, поскольку указатель фрейма в любом случае не будет пропущен по умолчанию -O0.

person ypnos    schedule 27.08.2009

Насколько я понимаю, Ox — это просто ярлыки для набора флагов оптимизации. Оптимизация по умолчанию равна нулю, поэтому использование одного флага без Ox должно выполнить именно эту оптимизацию.

По моему мнению, отсутствие указателя фрейма увеличивает сложность отладки при небольшом приросте производительности.

person rpg    schedule 27.08.2009
comment
На мой взгляд, отсутствие указателя фрейма... делает трассировку стека почти бесполезной. bt full будет покалечен. - person jww; 06.07.2015