Maison >développement back-end >Golang >Pourquoi différents ordres de champs dans les structures Go entraînent-ils des tailles variables ?

Pourquoi différents ordres de champs dans les structures Go entraînent-ils des tailles variables ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 01:36:10470parcourir

Why Do Different Field Orders in Go Structs Result in Varying Sizes?

Struct a une taille différente si l'ordre des champs est différent

1. Tailles de structure

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.

2. Valeurs de taille nulle

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!

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