Maison >développement back-end >Golang >Pourquoi les structures avec des champs identiques mais des ordres différents ont-elles des tailles différentes ?
Dans le code fourni, deux structures, A et B, avec des champs identiques mais des ordres de champ différents, démontrent des tailles différentes. Voici pourquoi :
Les exigences d'alignement de la mémoire pour les types de données imposent que les adresses des champs doivent être des multiples de valeurs spécifiques. Pour les champs int64, ce multiple est de 8 octets.
Dans la structure A, le premier champ est un booléen, qui prend 1 octet. Pour aligner le champ int64 suivant sur une limite de 8 octets, 7 octets de remplissage implicite sont ajoutés après a.
Dans la structure B, le premier champ est b de type int64. Puisqu'il est déjà aligné, seuls 3 octets de remplissage implicite sont nécessaires après a pour aligner le champ int suivant, ce qui prend 4 octets.
En raison de ce remplissage implicite, la taille de A fait 24 octets (1 octet pour a, 8 octets pour b et 15 octets de remplissage). Pendant ce temps, B fait 16 octets (1 octet pour a, 3 octets de remplissage, 8 octets pour b et 4 octets pour c).
La structure C est déclarée entièrement vide, ce qui donne une taille de 0 octet. Selon la spécification du langage Go, les structures sans champs supérieurs à zéro ont une taille de zéro.
Pour les valeurs de taille nulle, le langage autorise la même adresse mémoire à réutiliser pour des variables distinctes. Cela signifie que pour un := C{}, aucune mémoire n'est réellement allouée par le système.
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!