Maison >développement back-end >Golang >Pourquoi les structures avec des champs identiques mais des ordres différents ont-elles des tailles différentes ?

Pourquoi les structures avec des champs identiques mais des ordres différents ont-elles des tailles différentes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-26 03:29:08326parcourir

Why Do Structs with Identical Fields but Different Orders Have Different Sizes in Go?

Différentes tailles de structure avec un ordre de champ variable

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 :

Remplissage implicite

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.

Implications sur la taille

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).

Structs de taille zéro

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.

Adressabilité et allocation de mémoire

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn