Compiler-Logik für Funktions-Inlining in Go
In Go bestimmt der Compiler im Gegensatz zu C selbstständig, welche Funktionen für das Inlining geeignet sind. Obwohl es eine Debugging-Option gibt, um potenzielles Inlining zu beobachten, gibt es nur begrenzte Dokumentation zu den genauen Kriterien, die vom Go-Compiler verwendet werden.
Inlining-Optimierung
Unter Berücksichtigung der Notwendigkeit der Ausführung Wenn Sie wiederholt eine Schleife über einen Datensatz ausführen, untersuchen wir den folgenden Code:
func Encrypt(password []byte) ([]byte, error) { return bcrypt.GenerateFromPassword(password, 13) } for id, data := range someDataSet { newPassword, _ := Encrypt([]byte("generatedSomething")) data["password"] = newPassword someSaveCall(id, data) }
Überlegungen für Inlining
Um die Encrypt-Funktion möglicherweise für das Inlining durch den Compiler zu qualifizieren, berücksichtigen Sie Folgendes:
Compiler-Logik
Der Go-Compiler führt zwei Durchgänge durch inlining:
Die Aggressivität des Inlining kann mithilfe des Debug-Flags „l“ angepasst werden.
Empfehlung
Sofern die Leistung nicht zum Problem wird, wird allgemein empfohlen, sich auf das Standard-Inlining-Verhalten des Compilers zu verlassen. Wenn jedoch erhebliche Leistungssteigerungen erforderlich sind, sollten Sie erwägen, kleine, häufig aufgerufene Funktionen manuell einzubinden, um den Overhead zu minimieren.
Das obige ist der detaillierte Inhalt vonWie entscheidet der Go-Compiler, wann Funktionen integriert werden sollen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!