Considérons le programme C:confusion sur l'alignement des données ARM9
int main(void)
{
char string[10] __attribute__ ((aligned(32)));
int i;
int *intp = (int*)(string + 1);
printf("string: 0x%x, intp: 0x%x\n", string, intp);
for (i=0; i<10; i++)
{
string[i] = 10;
}
dump(string);
printf("*intp: 0x%x\n", *intp);
*intp = 0xEEEEEEEE;
dump(string);
return 0;
}
Je forçaient essentiellement CPU est d'accéder à un 32 bits de données (int) à une adresse désaligné. TBH J'espérais une erreur de disque sur ma carte ARM9. Mais au lieu que je suis un résultat intéressant/confusion:
Après avoir réglé intp à 0xEEEEEEEE, le dumping de la chaîne montre:
0xee, 0xee, 0xee, 0xee, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa
Ainsi, le code a changé en fait le premier élément dans la chaîne! Pourquoi?
Merci,
curiosité: Qu'advient-il si vous essayez 'int * intp = (int *) (string + 2);'? Que diriez-vous de +3? – cnicutar
@cnicutar: en fait +2 ou +3 ne ferait pas de différence! – lang2