salut,
Envoyé par
homeostasie
Par exemple, que signifierait:
* The stack pointer shall maintain 16-byte alignment.
* Padding to 8-byte boundary
"16-byte alignment" signifie que l'adresse en question doit etre un multiple de 16 bytes (16 octets), et "padding to 8-byte boundary" signifie que la structure memoire en question doit etre completee de facon a se terminer a la prochaine adresse multiple de 8, -1 octet.
(il s'agit bien de bytes et pas de bits)
l'alignement joue un role important au niveau du cache. les "lignes de cache" sont un ensemble de registres dont la taille depend du processeur (ex. une ligne de cache L2 sur P4 contient 128 bytes). la mise en cache d'un seul byte entraine la mise en cache de tous les bytes alentours necessaires pour constituer la ligne. l'optimisation de l'utilisation du cache consiste donc a faire en sorte de minimiser les "cache hits", en se debrouillant pour que les donnees accedees a un meme endroit du code soient toutes contenues dans la (les) meme(s) ligne(s) de cache. la aussi, au niveau du processeur, le mapping des adresses en memoire vers les lignes de cache se fait sur un nombre de bits restreint (c'est la "granularite" du cache, dont un des objectifs est d'empecher "l'overlapping" (le chevauchement) des zones de memoires representees par les lignes de cache).
au niveau du code, l'alignement des instructions a aussi un impact sur les performances et les optimisations possibles; il est meme parfois indispensable, comme sur MIPS ou chaque instruction doit etre alignee sur un word boundary (cette contrainte est due a la facon dont les adresses sont encodees au niveau des opcodes).
Edit: mon exemple (incorrect) de l'adressage des donnees sur ARM a ete remplace par un exemple (verifie) de l'adressage des instructions sur MIPS.
si tu travailles directement sur une carte PPC (une application embarquee peut-etre?), et que tu dois gerer par exemple des transferts DMA entre les composants peripheriques, il est fort probable que tu aies des contraintes dues a l'alignement des donnees.
tu trouveras plus de details ici: http://en.wikipedia.org/wiki/Data_structure_alignment
je ne saurai pas repondre a ta question concernant le stack frame.
-pirus
Partager