2009-08-15 2 views
3

Comment déterminer l'alignement d'une adresse en la regardant?Elaboration de l'alignement d'adresse

Sur un système 32 bits, une adresse de 0x12345670 signifie que 16 octets sont alignés (à cause du 0 à la fin) à droite?

Alors qu'en est:

0x12345671 0x12345672 0x12345673

etc?

vôtre, Jon

Répondre

6

Une adresse A est n-alignés si A mod n est égal à 0. Ainsi 0x12345671 et 0x12345673 sont alignées 1 et 2 est 0x12345672 alignés. 0x12345670 est, en même temps, aligné sur 1, aligné sur 2, aligné sur 4, aligné sur 8 et aligné sur 16. Vous ne mentionnez que la puissance la plus élevée de deux (car les puissances inférieures sont impliquées).

4

on regarde les chiffres hexadécimaux se terminant:

  • 1, 3, 5, 7, 9, B, D, F: 1-aligné
  • 2, 6, A, E: 2- aligné
  • 4, B: 4-aligné
  • 8: 8-aligné
  • 10, 30, 50, 70, 90, B0, D0, F0: 16 alignés
  • 20, 60, A0, E0; 32 alignés
  • 40, B0: 64 alignés
  • 80: 128 alignés
  • 00: 256 alignés ou plus ...
+0

10, 30, 50, 70, 90, B0 , D0, F0: aligné sur 16 Le code 16 n'est pas aligné sur 0x12345620? 0x12345620% 16 est 0. –

+0

@Jon, mais il 0x12345620% 32 est également 0, de sorte que vous donnez le plus élevé (j'ai complété la réponse de Martin par un moyen pratique) – AProgrammer

+0

Got it. Merci beaucoup. –

Questions connexes