Looking for go Keywords? Try Ask4Keywords

GoInline-Erweiterung


Bemerkungen

Inline-Erweiterung ist eine häufige Optimierung in kompiliertem Code, bei der die Leistung der binären Größe vorrangig zugeordnet wurde. Der Compiler kann einen Funktionsaufruf durch den eigentlichen Rumpf der Funktion ersetzen. effektiv Code kopieren / einfügen von einer Stelle an eine andere zur Kompilierzeit. Da die Aufrufstelle so erweitert ist, dass sie nur die Maschinenbefehle enthält, die der Compiler für die Funktion generiert hat, müssen wir kein CALL oder PUSH (das x86-Äquivalent einer GOTO-Anweisung oder eines Stack-Frame-Pushs) oder das entsprechende Äquivalent auf einem anderen ausführen Architekturen.

Der Inliner entscheidet, ob eine Funktion basierend auf einer Reihe von Heuristiken inline gesetzt werden soll oder nicht, im Allgemeinen jedoch standardmäßig Inline. Da der Inliner Funktionsaufrufe loswird, kann er effektiv entscheiden, wo der Scheduler eine Goroutine ablehnen darf.

Funktionsaufrufe werden nicht eingebettet, wenn eine der folgenden Bedingungen zutrifft (es gibt viele andere Gründe, diese Liste ist unvollständig):

  • Funktionen sind variadisch (zB haben sie ... args)
  • Funktionen haben eine "max hairyness", die über dem Budget liegt (sie rezyklieren zu stark oder können aus einem anderen Grund nicht analysiert werden)
  • Sie enthalten panic , recover sich oder defer

Inline-Erweiterung Verwandte Beispiele