2010-02-25 12 views

Odpowiedz

11

Opcja jest bezpieczna, ale sprawia, że ​​debugowanie jest trudniejsze. Zwykle kompilator C wyprowadza kod, który zapisuje w tradycyjnym rejestrze (ebp na x86) wskaźnik do ramki stosu dla tej funkcji. Debuggerzy używają tego do drukowania lokalnej zmiennej treści i innych podobnych informacji. Flaga nakazuje gcc nie zawracać sobie głowy tym rejestrem. W niektórych sytuacjach może to spowodować niewielki wzrost wydajności, głównie ze względu na mniejszy ślad kodu (co jest lepsze w przypadku pamięci podręcznej) i dodatkowy dostępny rejestr (zwłaszcza na x86 w trybie 32-bitowym, który jest notorycznie zagłodzony w rejestrach).

+0

@Thomas możesz podać kilka linków (jeśli wiesz) o szczegółach rejestru, jak wspomniano. – Adil

+0

Zobacz http://refspecs.freestandards.org/elf/, w szczególności dokumenty "Application Binary Interface" dla konkretnych architektur procesorów. W ABI dla i386, standardowy format ramki stosu (z użyciem 'ebp') jest opisany na stronie 36. Format ELF jest wspólny dla wielu" nowoczesnych "systemów typu Unix (np. Linux i FreeBSD). W systemach Windows sprawy wyglądają nieco inaczej, ale korzystają z tych samych zasad. –

2

Dopóki twój kod nie polega na niezdefiniowanym zachowaniu, jest całkowicie bezpieczny. Może to jednak spowodować, że pojawią się niezdefiniowane błędy zachowania.

Powiązane problemy