In Go optimiert der Compiler die Codeausführung durch Inlining von Funktionen, wobei der Code der aufgerufenen Funktion kopiert und direkt eingefügt wird in den Code des Anrufers ein. Dies verbessert zwar die Leistung, kann aber auch zu Situationen führen, in denen das Inlining von Funktionsaufrufen explizit verhindert werden muss.
Inline-Pragma:
Go bietet das Pragma //go:noinline, das Inlining für bestimmte Funktionen deaktiviert. Platzieren Sie diese Direktive direkt vor der Funktionsdeklaration, um deren Inline-Ausführung zu verhindern.
//go:noinline func isPrime(p int) bool { // ... }
Compiler-Flag:
Alternativ können Sie die gesamte Inline-Optimierung mit den Flags -gcffags deaktivieren =-l Compiler-Flag.
go build -gcflags=-l primes.go
Die Option -O0 in GCC deaktiviert alle Codeoptimierungen, einschließlich Inlining. Die Inlining-Optimierung von Go ist jedoch feinkörniger und ermöglicht eine explizite Kontrolle darüber, welche Funktionen inline sein sollen oder nicht.
Betrachten Sie den folgenden Codeausschnitt aus dem Beispiel für Primzahlen:
if isPrime(p) { fmt.Println(p) } func isPrime(p int) bool { for i := 2; i < p; i += 1 { for j := 2; j < p; j += 1 { if i * j == p { return false } } } return true }
Standardmäßig wäre die Funktion isPrime möglicherweise in die if-Anweisung eingebunden Verlangsamung des Programms aufgrund der Doppelschleife. Durch das Hinzufügen der //go:noinline-Direktive zur isPrime-Funktion wird sichergestellt, dass diese direkt aufgerufen wird, was die Leistung verbessert.
Das obige ist der detaillierte Inhalt vonWie kann ich das Funktions-Inlining in Go explizit steuern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!