Non, l'alignement n'est pas une contrainte uniquement pour les tableaux ou les structures. C'est plutôt l'inverse : pour respecter des contraintes d'alignement (valables même pour une "variable simple"), le padding apparait dans les structures.
A noter aussi que certains processeurs interrompent le programme en cas d'accès non alignés. Par un exemple sur un ARM Cortex-M0, un code comme celui-ci peut ou pas planter, selon comment array aura été aligné :
1 2 3 4 5 6 7 8 9 10 11
| void process(void* array)
{
int* p = (int*) array;
*p = 666; // boum potentiel!
}
int main(void)
{
char array[71];
process(array);
} |
Partager