Inline-Funktionen ohne Optimisierung
-
Hallo. Ich hätte da eine Frage zu dem Inlinen und dem GCC-Kompiler. Laut dem GCC-Manual http://gcc.gnu.org/onlinedocs/gcc-4.5.3/gcc/Inline.html#Inline
GCC does not inline any functions when not optimizing unless you specify the `always_inline' attribute for the function, like this:
/* Prototype. */ inline void foo (const char) __attribute__((always_inline));
In meinem Fall habe ich aber die Funktionen in einer Header-Datei definiert, habe also gar keine separate Funktionsdeklaration, sondern direkt die Implementierung.
Wird dann trotzdem vom Kompiler nicht geinlined? Den __attribute__((always_inline)) kann ich ja nur bei der Deklaration, nicht bei der Implementierung setzen. Soll ich also extra dafür noch Deklarationszeilen in die Header-Datei einfügen?
Gruß
Ewgenij
-
Mal ehrlich: Spielt das eine Rolle? Wenn du inline-Semantik willst (also das was inline über die Linkage und ODR aussagt), hast du sowieso schon was du möchtest. Wenn du möchtest, dass die Funktionen wirklich inline im ursprünglichen Sinne sind, dann schalte eben die Optimierung ein.
Bist du wirklich der eine Mensch auf der Welt, der "echtes" Inlining in einer Debugversion benötigt?
-
Ewgenijkkg schrieb:
Optimisierung
-
volkard schrieb:
Ewgenijkkg schrieb:
Optimisierung
-
SeppJ schrieb:
Mal ehrlich: Spielt das eine Rolle? Wenn du inline-Semantik willst (also das was inline über die Linkage und ODR aussagt), hast du sowieso schon was du möchtest. Wenn du möchtest, dass die Funktionen wirklich inline im ursprünglichen Sinne sind, dann schalte eben die Optimierung ein.
Bist du wirklich der eine Mensch auf der Welt, der "echtes" Inlining in einer Debugversion benötigt?OK, stimmt auch. Aber wird denn dann wirklich geinlined? Oder liegt die Entscheidung immer noch beim Compiler? Das ist mir nicht so ganz klar geworden.
-
Wenn der Compiler es für eine Optimierung enthält, die Funktion zu inlinen, dann wird er es tun (gcc glaube ich ab -O3), wenn er es für schädlich hält, dann nicht, selbst wenn im Code steht, die Funktion solle inline sein. Es gibt Schalter, um ein inlinen zu erzwingen, aber das ist nicht empfehlenswert, der Compiler weiß solche Optimierungssachen fast immer besser.