bonjour à tous,
voila si j'ai
struct A{
int m_value ;
char c;
}
struct B{
int m_value;
char c;
}__attribute__((packed))
B aura une taille de 5 octets alors que la structure de A aura une taille de 8 octets. Le compilateur rajoute des octets de padding mais pourquoi?
sur un pc 64 bits, le bus de donné et de 128 bits, donc on peut recupérer a chaque coup d'horloge jusqu'a 16 octets de mémoire. Donc si mon processus a besoin de récupérer la valeur de m_value quel est l'interet
d'ajouter des octets de padding. ca ne va rien changer car je peux lire facilement mon octets avec ou sans padding.
Merci d'avance pour votre aide
# À cause des accès aligné par les instructions en asm
Posté par ninis666 . Évalué à 4. Dernière modification le 12 septembre 2019 à 16:54.
En demandant à gcc de générer l'assembleur d'un truc qui itère sur des tableaux de A ou B, tu verras pourquoi :
C'est pourquoi il faut aligner correctement les champs des structures ou de n'utiliser les attributs d'alignement que si on n'a pas le choix ...
De mon temps, c'était plus facile de lire l'assembleur produit par gcc, (c'était du 32 bits) !
[^] # Re: À cause des accès aligné par les instructions en asm
Posté par David Marec . Évalué à 6.
Précisez
-fverbose-asmà GCC.[^] # Re: À cause des accès aligné par les instructions en asm
Posté par ninis666 . Évalué à 1.
Excellent, merci !
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: À cause des accès aligné par les instructions en asm
Posté par Cyril Brulebois (site web personnel) . Évalué à 2.
Voir aussi la configurabilité du comportement noyau en cas d'accès non aligné, sur certaines plateformes (ARM) → https://www.kernel.org/doc/html/latest/arm/mem_alignment.html
Debian Consultant @ DEBAMAX
[^] # Re: À cause des accès aligné par les instructions en asm
Posté par cosmoff . Évalué à 4.
dsl mais je n'ai pas compris ton explication, tout ce que je vois c'est du code assembleur^
[^] # Re: À cause des accès aligné par les instructions en asm
Posté par benoar . Évalué à 2.
En gros, le code utilisant la structure non-alignée est plus complexe et plus coûteux. Le padding qui te fait « perdre » de l'espace mémoire te fait gagner en performance et en compacité de code.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.