Gibt es eine Möglichkeit, eine Liste von Funktionen zu erhalten, die nirgends inline waren? Entweder durch Übergeben einer Option an gcc oder durch Überprüfen der Binärdatei?
BEARBEITEN: Ich weiß, wie man ausdrücklich darum bittet, dass eine Funktion nicht inline ist, indem man das eingebaute Attribut noinline von gcc benutzt.
Fügen Sie den Compileroptionen -fdump-ipa-inline
hinzu.
Übergeben Sie die Datei yoursourcefile.inline
, die neben der Objektdatei für "Inline-Kandidat berücksichtigen" erstellt wurde, um alle Funktionen zu ermitteln, die der Compiler als inlining-Elemente betrachtete.
Überzeuge die Datei für "Inlined in", um alle Funktionen herauszufinden, die der Compiler schließlich inline erledigt hat.
Grep für "inline_failed:", wenn Sie sich für den Grund interessieren, warum der Compiler einen Kandidaten abgelehnt hat (z. B. "Aufruf ist unwahrscheinlich und Code-Größe würde wachsen").
'inline' ist kein Attribut einer Funktion, eine Funktion kann sowohl inline als auch nicht inline sein. Wenn Sie eine Funktion aufrufen, entscheidet der Compiler, ob er inline ist oder nicht. Wenn es mehrere Aufrufe gibt, kann der Compiler andere Optionen für verschiedene Aufrufe auswählen. Wenn mindestens ein nicht inlinierter Anruf vorhanden ist, wird die Funktion in der Symboltabelle angezeigt. und wenn es exportiert wird, wird es auch in der Symboltabelle erscheinen.
es gibt also keine Möglichkeit zu überprüfen, ob eine Funktion inline ist oder nicht, Sie können nur überprüfen, ob ein bestimmter Anruf inline ist oder nicht, indem Sie Reverse Engineering durchführen.