2009-08-27 9 views
7

Zastanawiam się, co -fno-omit-frame-wskaźnik zrobi bez optymalizacji?-fno-omit-frame-wskaźnik bez optymalizacji

CXXFLAGS = -Wall -ggdb3 -DDEBUG -fno-pominąć-frame-pointer

Czy nie jest to fomit-frame-pointer auto włączone na wszystkich poziomach -O (z wyjątkiem - O0)? Zakładam, że w moim przykładzie jest to domyślnie -O0.

Dzięki i pozdrawiam!

+0

na x86 i rodzinie, '-fomit-frame-pointer' jest ** nie ** włączone domyślnie dla wyższych poziomów optymalizacji, ponieważ mogłoby to utrudnić debugowanie. –

+2

Należy zauważyć, że w architekturach takich jak x86-64 i ramienia, domyślnie nie jest generowany wskaźnik ramki (jest on określony w ABI), więc ta opcja spowoduje, że kompilator wygeneruje rejestr wskaźnika ramki. –

Odpowiedz

6

Jak już sugerujesz, -fno-omit-frame-pointer jest po prostu ignorowane w twoim przypadku, ponieważ wskaźnik ramki nie zostałby anulowany w domyślnym -O0.

2

Jak rozumiem, wół to tylko skróty do zestawu flag optymalizacyjnych. Domyślna optymalizacja wynosi zero, więc użycie jednej flagi bez wołów powinno wykonać właśnie tę optymalizację.

W mojej opinii pominięcie wskaźnika ramki zwiększa trudność debugowania przy niewielkim wzroście wydajności.

+0

* "Moim zdaniem, pomijając wskaźnik ramki ..." * - powoduje, że ślady stosu są prawie bezużyteczne. 'bt full' będzie kaleką. – jww

Powiązane problemy