Frage

Wird dieser Code:

inline int funcA(int a) __attribute__((always_inline))
{
    return a + 1;
}
inline int funcB(int b) __attribute__((always_inline))
{
    return funcA(b + 2);
}
int main()
{
    return funcB(3);
}

transformiert Code wie folgt:

int main()
{
   return ((3) + 2) + 1;
}

GCC, ARM (iPhone)

War es hilfreich?

Lösung

Inlining Anrufe Funktion ist nicht etwas, das Sprache-Compiler zu tun erfordert. Es ist eine Qualität der Umsetzung Ausgabe (QoI). Aber jeder von GCC, MSVC und Klirren wird es tun. Natürlich müssen Sie Optimierung aktivieren.

Zum Beispiel

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}

Andere Tipps

Es gibt keine Garantien, wenn inline verwenden. Sie dient lediglich als Hinweis an den Compiler (die in vielen (nicht allen) Fällen haben mehr Heuristiken und ein besseres Verständnis der Auswirkungen von inlining als der Programmierer).

Nicht unbedingt. Es hängt von auf dem Compiler und Einstellungen, denke ich. In der Tat in C ++ zum Beispiel ist es nicht einmal garantiert, dass diese

inline int funcA(int a)
{
    return a + 1;
}
int main()
{
    return funcA(3);
}

wird in diesem

get umgewandelt
int main()
{
    return 3 + 1;
}

Inline ist nur der Hinweis für den Compiler. Der Compiler kann es ignorieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top