Résumé : Différents remplissages implicites sont ajoutés en fonction de l'ordre des champs dans une structure, ce qui affecte sa taille.
Différentes architectures nécessitent un alignement différent pour la mémoire adresses. Par exemple, dans le code fourni, on suppose que l'architecture cible est 386, où l'alignement de int64 est de 8 octets.
Dans la structure A, puisque le premier champ est booléen, il y a un remplissage implicite de 7 octets. après A.a pour garantir que A.b, qui est de type int64, commence sur une adresse alignée sur 8 octets. Ce remplissage est nécessaire car la structure elle-même est alignée sur 8 octets.
Dans la struct B, cependant, il n'y a qu'un remplissage implicite de 3 octets après B.a car il est suivi d'un champ de type int (qui a une taille de 4 octets) et non int64.
La spécification pour Go indique qu'un type de structure ou de tableau a une taille zéro s'il ne contient aucun champ ou élément d'une taille supérieure à zéro.
Cela signifie que zéro- les variables de taille peuvent avoir la même adresse en mémoire. Les implémentations actuelles suivent cette règle, donc aucune mémoire n'est allouée pour les valeurs de types ayant une taille nulle, y compris la struct struct{} vide et les tableaux de longueur nulle.
Par exemple, dans le code fourni, C est une structure de taille nulle. Par conséquent, aucune mémoire n'est allouée pour les instances de C.
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!