2012-06-24 11 views
8

Uczyłam się, żeGłębokość inline kompilator GCC w

Inline specifier to aluzja do kompilatora, że ​​powinien próbować wygenerować kod [...] inline zamiast ustanawiające kod funkcji Funkcja raz, a następnie wywoływanie zwykłego wywołania funkcji mechanizmu.

Pytania:

  1. Jeśli optymalizacja jest wyłączony dla kompilatora GCC, jest specifier inline ignorowane?
  2. Gdy funkcje inline są wywoływane rekurencyjnie, która opcja kompilatora określa "głębokość inline", dopóki nie będzie ona zgodna z normalnym mechanizmem wywoływania funkcji?
  3. Jeśli funkcja inline jest wywoływana wewnątrz pętli for, czy ta sama "głębia inline" pojawia się na obrazie?

Odpowiedz

7

Jeśli optymalizacja jest wyłączona dla kompilatora GCC, czy wbudowany specyfikator jest ignorowany?

Tak, jeśli optymalizacja jest wyłączona w GCC, żadne funkcje nie zostaną wstawione. Jest to równoważne użyciu flagi -fno-inline podczas kompilacji. Zobacz ten link

-fno-inline

Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.

Kiedy funkcje inline nazywane są rekurencyjnie, która opcja kompilatora określa głębokość inline „”, aż następuje normalny mechanizm wywołania funkcji?

Opcje max-inline-recursive-depth i max-inline-recursive-depth-auto. Domyślna głębokość to 8.

2

Poza opcją -ofno-inline, należy również użyć opcji -ofno-default-inline, aby wyłączyć funkcje wbudowane w klasach. Jest to przydatne, gdy używasz gdb do przechodzenia do tych funkcji inline.

Powiązane problemy