Avant-propos
Lorsque vous utilisez Golang pour le développement, avez-vous déjà rencontré de nouveaux échecs ? Lorsque cela se produit, comment devez-vous y faire face ?
Cet article vous donnera une compréhension approfondie des raisons pour lesquelles new échoue dans Golang et vous fournira quelques méthodes de traitement pour vous aider à résoudre ce problème.
1. Quoi de neuf ?
new est une fonction intégrée utilisée pour allouer de la mémoire. Sa fonction est équivalente à malloc en langage C, nouvel opérateur en Java, etc.
Le prototype de la fonction est le suivant :
func new(Type) *Type
Regardons un exemple :
package main
import "fmt"
func main() {
var ptr *int ptr = new(int) fmt.Println("ptr 值为:", ptr) fmt.Println("*ptr 值为:", *ptr)
}
La définition de code ci-dessus Un pointeur ptr pointant vers le type int est obtenu, et new(int) est utilisé pour allouer de la mémoire pour ptr. Ensuite, imprimez le pointeur et la sortie de la console est la suivante :
la valeur ptr est : 0xc0000140a0
*la valeur ptr est : 0
Vous pouvez voir que ptr pointe vers une adresse, et la valeur de *ptr est 0, cela est la valeur par défaut pour les variables de type int.
2. Raisons de l'échec de new
Dans Golang, si la nouvelle fonction ne parvient pas à allouer de la mémoire, une valeur nulle sera renvoyée.
Alors, pourquoi le nouveau ne parvient-il pas à allouer ? Les raisons possibles sont analysées ci-dessous.
La nouvelle fonction alloue à partir du tas lors de l'allocation de mémoire. Si la mémoire du tas est insuffisante, la nouvelle allocation peut échouer.
Lorsqu'une grande quantité de mémoire doit être allouée, les ressources du système d'exploitation s'épuiseront progressivement. Des ressources insuffisantes du système d’exploitation peuvent également entraîner l’échec d’une nouvelle allocation.
S'il y a une fuite de mémoire dans le code, cela entraînera un grand nombre de blocs de mémoire qui ne pourront pas être libérés dans le système, provoquant finalement l'échec d'une nouvelle allocation.
3. Comment gérer un nouvel échec ?
Que faut-il faire lorsque le nouveau ne parvient pas à allouer de la mémoire ? Voici plusieurs solutions pour vous.
Si la mémoire nouvellement allouée est utilisée pour stocker une grande quantité de données, elle peut être divisée en plusieurs petits blocs pour une allocation dynamique. Cela peut non seulement résoudre le problème de l'échec des nouvelles allocations, mais également améliorer l'efficacité du programme.
Une fois les ressources système insuffisantes, la nouvelle allocation échouera. À l'heure actuelle, le problème peut être résolu en augmentant les ressources système. Par exemple, augmentez la mémoire, augmentez l'espace disque, etc.
Les fuites de mémoire sont l'une des causes importantes d'une mémoire système insuffisante. S'il y a une fuite de mémoire, elle doit être corrigée à temps pour éviter un nouvel échec d'allocation.
Si l'allocation de mémoire à l'aide de la nouvelle fonction échoue, vous pouvez utiliser la fonction make pour l'allouer. Contrairement à la nouvelle fonction, la fonction make ne peut être utilisée que pour allouer de la mémoire aux types de tranche, de carte et de canal. Le prototype de la fonction est le suivant :
func make(Type, size IntegerType) Type
La fonction make peut initialiser la mémoire allouée avant d'allouer la mémoire. Par conséquent, lorsqu'il s'agit de certains types de données qui doivent être initialisés, c'est plus. plus pratique d'utiliser la fonction make que la nouvelle fonction.
Voici un exemple d'utilisation de la fonction make pour allouer de la mémoire aux tranches :
package main
import "fmt"
func main() {
var s []int s = make([]int, 10) fmt.Println("s 容量为:", cap(s))
}
Dans le code ci-dessus, nous allouons les tranches via le fonction make Il existe 10 blocs mémoire de type int. Le résultat de sortie est le suivant :
s capacité est : 10
Résumé
Cet article explique les raisons d'un nouvel échec dans Golang et comment y faire face. Lorsque la nouvelle fonction ne parvient pas à allouer de la mémoire, vous pouvez résoudre le problème en modifiant la structure du programme, en augmentant les ressources système, en corrigeant les fuites de mémoire et en utilisant la fonction make.
Dans le travail quotidien, nous devons toujours faire attention à l'utilisation de la mémoire pour éviter une utilisation excessive de la mémoire et provoquer de nouvelles pannes d'allocation de mémoire. Ce n'est que grâce à une utilisation efficace de la mémoire que les performances et l'efficacité du programme peuvent être améliorées.
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!