6
votes

Comment les membres de la structure sont-ils stockés sur une petite machine Endian?

  0x1000  +0   +1   +2   +3
         ___________________
    x:  | 10 |  0 |  0 |  0 |     
         -------------------       
    y:  | 'a'|  0 |  0 |  0 |
         -------------------
  0x1000  +4   +5   +6   +7 
c

1 commentaires

C'est assez dépendant de compilateur. Non seulement nous traitons avec l'alignement et le rembourrage des structures, nous traitons également des types de données de largeur non fixe.


3 Réponses :


4
votes

Layout de structure est un détail de mise en œuvre du compilateur, affecté par l'emballage par défaut. Endansness Normalement n'affecte que l'ordre des octets dans une valeur de l'élément de structure, pas la mise en page. Vérifiez la petite impression dans le manuel du compilateur ou utilisez Taillef et le décalage de macro pour expérimenter.

La mise en page que vous avez documentée dans votre question est en effet très fréquente pour un compilateur 32 bits.


0 commentaires

7
votes

Je pense que vous trouverez cette question utile. L'endianess est généralement pertinente pour un mot dans la mémoire, pas à la structure entière.


0 commentaires

1
votes

Les membres de la structure seront décrits dans l'ordre, avec un rembourrage inséré si nécessaire afin que chaque champ soit correctement aligné sur son type et avec un rembourrage inséré si nécessaire à la fin de telle sorte que dans une matrice chaque structure ultérieure soit correctement alignée et commence immédiatement après la fin de la structure précédente. Il est également possible (mais improbable) que d'autres remplissages inutiles soient insérés entre deux éléments ou à la fin.

Chaque champ lui-même sera stocké le cas échéant pour le type sur le compilateur et l'architecture, par ex. L'int 10 serait stocké comme les octets 0a 00 00 00 sur une machine normale-endian avec des INT de 32 bits.


0 commentaires