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) /EDITauch 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)
-
IPO ist aber genau das Gleiche wie LTO nur mit einem anderen Namen. Siehe http://software.intel.com/sites/products/documentation/studio/composer/en-us/2009/compiler_c/optaps/common/optaps_ipo_mult.htm
-
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.