Wann Header only?



  • Hallo,
    wann soll man eine Klasse Header only machen? Denn sobald ich was in .h und .cpp Datei aufteile, kann der Compiler ja nicht mehr inlinen, auch erscheinen mir manche Funktionen zu kurz, um sie extra in eine .cpp Datei zu stecken. Doch dann habe ich das Gefühl, das mein Code inkonsitent ist.
    Gibts da irgendwelche Richtlinien?



  • Denn sobald ich was in .h und .cpp Datei aufteile, kann der Compiler ja nicht mehr inlinen

    Aktuelle Compiler können z.T. auch Dinge inlinen die in (anderen) .cpp Files implementiert sind.
    Dazu wird das Erzeugen des "eigentlichen" Codes in die Link-Phase verschoben.

    MSVC nennt das "Link Time Code Generation".
    GCC 4.x kann das soweit ich weiss auch, weiss aber nicht wie es dort heisst.
    EDIT: OK, GCC nennt es "Link Time Optimization" (-flto Switch) /EDIT

    auch erscheinen mir manche Funktionen zu kurz, um sie extra in eine .cpp Datei zu stecken

    Naja, das sollte ja wohl kein Kriterium sein.

    Gibts da irgendwelche Richtlinien?

    Ja, klar, massig. Wenn du 100 Leute fragst, bekommst du 100 verschiedene 😉



  • Ich würde wetten, dass Inlinen-Optimierung unabhängig von LTO funktionieren. 🙂



  • Zeus schrieb:

    Ich würde wetten, dass Inlinen-Optimierung unabhängig von LTO funktionieren. 🙂

    Um wieviel? *gier*



  • Hassu du den ICC?

    Advanced Performance
    Enable and specify the scope of Interprocedural (IP) Optimizations:

    -ip Enable single-file IP optimizations (within files)

    -ipo Enable multi-file IP optimizations (between files)

    -ipo_c Generate a multi-file object file (ipo_out.o)

    -ipo_S Generate a multi-file assembly file (ipo_out.s)

    Modify the behavior of IP:

    -ip_no_inlining
    Disable full and partial inlining (requires -ip or -ipo)

    -ip_no_pinlining
    Disable partial inlining (requires -ip or -ipo)

    -ipo_obj Force generation of real object files (requires -ipo)





  • Man sollte nie versuchen schlauer als der Compiler zu sein. Das ist meine Devise.
    Headers Only mache ich dann, wenn ich nicht drum herum komme: bei Templates.



  • Hatten wir kürzlich.



  • Zeus schrieb:

    Ich würde wetten, dass Inlinen-Optimierung unabhängig von LTO funktionieren. 🙂

    Cross-TU Inline-Optimierung kann ohne LTO per Definition nicht funktionieren.



  • hustbaer schrieb:

    Zeus schrieb:

    Ich würde wetten, dass Inlinen-Optimierung unabhängig von LTO funktionieren. 🙂

    Cross-TU Inline-Optimierung kann ohne LTO per Definition nicht funktionieren.

    Da ich nicht als Kanarienscheißer gelten will, widersprach ich dir mal nicht.


Anmelden zum Antworten