Inlinen



  • Hallo,

    Ich experimentiere gerade mit Inlining. Gibt es für den GCC eine Option, den Code _nach_ dem Inlining nochmal auszugeben? Oder passiert das ohnehin nur auf Assembler-Ebene? Mich interessiert, wie der Compiler vorgeht, wenn man schreibt:

    inline void someFunc()
    {
      d
      e
      f
      g
    }
    
    void algo1()
    {
      someFunc();
      someFunc();
      someFunc();
    }
    

    Falls der Compiler die Inline-Empfehlung annimmt, dupliziert er dann stur den Code, also so:

    void algo1()
    {
    d
    e
    f
    g
    d
    e
    f
    g
    d
    e
    f
    g
    }
    

    ...oder versucht er, den Maschinencode mit einer Schleife kurz zu halten? Falls ja, kann er das dann auch für mehrfache Aufrufe aus einer Funktion, wo dazwischen noch andere Dinge passieren?

    void algo1()
    {
      someFunc();
      a
      b
      someFunc();
      c
      someFunc();
    }
    

  • Mod

    inliner schrieb:

    Oder passiert das ohnehin nur auf Assembler-Ebene?

    Assembler-Ebene.

    Schleifen werden tendenziell eher abgerollt, sofern möglich und nicht zu viele Iterationen.



  • Ev. hilft Dir der FAQ Eintrag noch ein wenig:
    http://www.c-plusplus.net/forum/105893



  • Danke, das hilft mir schon mal.

    lg


Anmelden zum Antworten