Frage

Ich weiß, dass Compiler möglicherweise eine Inline -Erweiterung einer Funktion ausführen kann oder nicht, unabhängig davon, ob der Programmierer angefordert wird oder nicht.
Ich war nur neugierig zu wissen. Gibt es eine Möglichkeit, wie der Programmierer mit Sicherheit wissen kann, dass Compiler eine bestimmte Funktion eingefügt hat?

War es hilfreich?

Lösung

Abgesehen von der Betrachtung des generierten Codes nein. Einige Implementierungen können diese Informationen liefern, dies ist jedoch nicht vom Standard erforderlich.

Dinge wie inline oder register (schaudern) sind Anregungen dem Compiler und es ist frei, sie zu akzeptieren, sie zu ignorieren oder sogar zu lügen, dass es es getan hat, während es heimlich hinter deinen Rücken geht und es nicht tut :-)

Ich neige dazu, solche Funktionen nicht zu verwenden, da ich vermute, dass der Compiler oft besser weiß als ich, wie ich die größte Leistung aus meinem Code herausringen kann.

Andere Tipps

Sie können Ihren Code profilieren und feststellen, ob die Funktion des Interesses im Anrufstapel angezeigt wird. Ich nehme an, es gibt keine Garantie, wenn Ihre Stapelabtastrate nicht hoch genug ist.

Aber es kann beweisen, dass es eingefügt ist: wenn Sie es wissen A Anrufe B, was ruft C, und A ruft niemals an C direkt, wenn Sie sehen A Berufung C Auf dem Anrufstack wissen Sie B wurde für diesen Anruf eingebaut.

Stellen Sie Ihren Compiler so ein, dass Sie Assembler -Code generieren und dort überprüfen.

Lesen Sie die Demontage der Objektdatei.

Es gibt keine Möglichkeit zu wissen, außer den Ausgangsassembler zu betrachten.

Compiler sind heutzutage "intelligent" und entscheiden, welche Funktionen und in welchen Fällen eine Rolle spielen soll.

Genau wie beim Schlüsselwort Register machen Compiler heutzutage die Auswahl und ignorieren Ihre Anfragen wirklich.

Ich glaube nicht, dass es eine Möglichkeit gibt, herauszufinden, was Sie wollen,

Sie können jedoch die Möglichkeit erhöhen, dass die Funktion eine Inline -Funktion ist, durch,

Die Definition der Funktion für die Übersetzungseinheit sichtbar machen, in der sie aufgerufen wird. dh Sie müssen immer die Definition einer Inline -Funktion in die Header -Datei einfügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top