Dans Go, le compilateur optimise l'exécution du code en inlinant des fonctions, où le code de la fonction appelée est copié et directement inséré dans le code de l'appelant. Bien que cela améliore les performances, cela peut également conduire à des situations dans lesquelles les appels de fonction doivent être explicitement empêchés d'être intégrés.
Pragma en ligne :
Go propose le pragma //go:noinline, qui désactive l'inline pour des fonctions spécifiques. Placez cette directive immédiatement avant la déclaration de la fonction pour empêcher son exécution en ligne.
//go:noinline func isPrime(p int) bool { // ... }
Drapeau du compilateur :
Vous pouvez également désactiver toutes les optimisations en ligne à l'aide de -gcflags =-l indicateur du compilateur.
go build -gcflags=-l primes.go
L'option -O0 dans GCC désactive toutes les optimisations de code, y compris l'inline. Cependant, l'optimisation intégrée de Go est plus fine, permettant un contrôle explicite sur les fonctions qui doivent être intégrées ou non.
Considérez l'extrait de code suivant du Exemple de primes :
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 }
Par défaut, la fonction isPrime serait intégrée dans l'instruction if, potentiellement ralentir le programme en raison de la double boucle. L'ajout de la directive //go:noinline à la fonction isPrime garantit qu'elle est appelée directement, améliorant ainsi les performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!