Wann ist das Schlüsselwort "inline" in C wirksam?

8

Nun, es gibt keine Garantie durch den Standard, dass inline Funktionen tatsächlich inline sind; Man muss Makros verwenden, um 100% Garantie zu haben. Der Compiler entscheidet unabhängig von dem inline -Schlüsselwort immer auf Basis seiner eigenen Regeln, welche Funktion eingebunden ist oder nicht.

Wann wird das Schlüsselwort inline tatsächlich etwas bewirken, was der Compiler macht, wenn er moderne Compiler wie die aktuelle Version von GCC verwendet?

    
xiver77 14.12.2014, 00:40
quelle

2 Antworten

4

Es hat einen semantischen Effekt. Zur Vereinfachung kann eine mit inline gekennzeichnete Funktion in einem Programm mehrfach definiert werden - obwohl alle Definitionen einander entsprechen müssen. Daher ist die Anwesenheit von inline für die Korrektheit erforderlich, wenn die Funktionsdefinition in die Header eingefügt wird (also in drehen, macht die Definition sichtbar, so dass der Compiler sie ohne LTO inline einbinden kann.

Abgesehen davon ist "nie" für die Inline-Optimierung eine vollkommen sichere Näherung. Es hat wahrscheinlich einige Auswirkungen in einigen Compilern, aber nichts, das den Schlaf zu verlieren lohnt, vor allem nicht ohne tatsächliche harte Daten. Im folgenden Code, mit Clang 3.0 oder GCC 4.7 , enthält main beispielsweise denselben Code, unabhängig davon, ob work als% markiert ist. co_de% oder nicht. Der einzige Unterschied besteht darin, ob inline als Standalone-Funktion für andere Übersetzungseinheiten zum Verknüpfen mit oder zum Entfernen bleibt.

%Vor%     
delnan 14.12.2014, 00:54
quelle
1

Wenn Sie Inlining steuern möchten, halten Sie sich an alle Pragmas oder Attribute, die Ihr Compiler bereitstellt, um dieses Verhalten zu steuern. Zum Beispiel __attribute__((always_inline)) auf GCC und ähnliche Compiler. Wie Sie bereits erwähnt haben, wird das Schlüsselwort inline oft ignoriert, abhängig von den Optimierungseinstellungen usw.

    
Carl Norum 14.12.2014 00:44
quelle

Tags und Links