Bonjour,
pouvez-vous m'expliquer c'est quoi l'alignement des données en mémoire ?
Je ne comprends pas pourquoi l'adresse doit être aligné avec le type auquel elle appartient. Par exemple un type int ne pourra avoir comme adresse que des multiples de ce type.
ou encore souvent pour représenter le RGB en informatique on le code sur 32 bits pour avoir 8 bits de padding donc RGB(X) et donc être aligné sur la frontière 4 bytes. (d'ailleurs qu'est-ce-que cela veut dire être aligné sur une frontière n bytes ?).
En investiguant le code memchr de la glibc, je me rends compte aussi qu'il aligne l'adresse sur une frontière longword (32 bits).
Je suppose qu'ils font cela pour pouvoir travailler sur 4 octets à la fois au lieu de 1 octet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr;
J'ai vraiment du mal à visualiser l'alignement des données.
Merci de votre réponse.
Partager