2016-03-22 7 views
0

In meinem Projekt habe ich einige "Interface" -Funktionen, die in meinen Header-Dateien definiert sind. Aber ich habe viel mehr Funktionen, die nur intern in der gleichen Quelldatei verwendet werden. Daher gibt es auch keine Funktionsdeklaration in einer Header-Datei.C inline alle Funktionen in Quelldatei

Ist es eine gute Übung, sie als inline zu deklarieren? Da Inline-Funktionen besser in der Leistung sind, klingt es für mich eine gute Idee. Oder gibt es irgendwelche Nachteile? Ich weiß, dass die ausführbare Datei größer werden könnte, aber das ist in Ordnung für mich.

+6

Es empfiehlt sich, sie als "statisch" zu deklarieren. – LPs

Antwort

4

Lokale Funktionen, die nicht in verschiedenen Einheiten von Übersetzungen verwendet werden, sollten als static qualifiziert werden.
Der Spezifizierer inline weist den Compiler an, die Funktion zu inline zu schreiben, wenn dies möglich ist, erzwingt jedoch nicht das Inlining. Wenn Sie möchten, dass der Compiler die Funktion inline eingibt, verwenden Sie forceinline oder __forceinline, um das Inlining zu erzwingen.
Wie auch immer, wenn Inlining-Funktionen berücksichtigen, dass dies nicht immer die beste Lösung ist. Sie sollten die Gesamtleistung Ihres Codes sorgfältig überprüfen. Der Inlining-Prozess führt den Code der Funktion innerhalb des aufrufenden Codes zusammen. Dies erfordert eine gewisse Registerverfügbarkeit, um eine Berechnung durchzuführen, ohne die Hauptausführung zu stören. Manchmal erfordert der Vorgang des Registersuchlaufs die temporäre Speicherung von aktuellen Werten oder dergleichen, die die Gesamteffizienz des Codes verschlechtern könnten.
Das Inlining ist vorteilhaft, wenn es sich um einen kurzen Prozess handelt und die Zeit für die Ausführung innerhalb des Hauptcodes geringer ist als die für Prolog und Epilog benötigte Zeit.

3

Zögern Sie nicht, markieren Sie sie einfach als static inline, wie Sie möchten.

Beachten Sie, dass eine mit inline gekennzeichnete Funktion nicht erforderlich ist Inline. Es bleibt den Compilern überlassen, ob sie es inline machen. Moderne Compiler sind "schlau" genug, also lassen Sie Ihren Compiler einfach seine Entscheidung treffen, die vertrauenswürdig ist.

3

inline ist nur ein Hinweis auf den Compiler. Wenn Sie inline angeben, kann der Compiler diesen Hinweis nicht berücksichtigen. Wenn Sie inline nicht angeben, kann der Compiler die Funktion inline einfügen.

Siehe 6.7.4 (p6) in the C11 Standard.

+0

Also macht es tatsächlich einen Unterschied, wenn ich 'Inline' spezifiziere oder nicht? –

+0

@ThomasSparber Sie geben dem Compiler einen Vorschlag, indem Sie 'inline' hinzufügen. Ohne diesen Vorschlag wird eine Funktion nicht inline ausgeführt. –