Comment puis-je vérifier une adresse mémoire est 32 bits alignés en C
Ma question est en deux parties.
Tout d'abord, comme un débutant à cet espace d'adresse, je voudrais savoir quel est le sens de l'alignement de la mémoire d'une adresse. J'ai Googlé ce sujet mais je voulais poser cette question ici, car j'ai trouvé des réponses ici très utile.
La deuxième partie de ma question est liée à l'alignement et de la programmation: comment savoir si une adresse est 4 octets aligné ou pas ?
J'ai lu quelque part:
if(address & 0x3) //for 32 bit register
Mais je ne sais pas vraiment comment cela vérifie les 4 octets de l'alignement.
Quelqu'un pourrait-il expliquer en détail?
Edit: Ce serait génial Si quelqu'un peut tirer picturale vue à ce sujet.
Grâce
source d'informationauteur Amit Singh Tomar | 2013-10-04
Vous devez vous connecter pour publier un commentaire.
Séquentielle adresses, reportez-vous à séquentielle octets en mémoire.
Une adresse "4 octets aligné" est un multiple de 4 octets. En d'autres termes, la représentation binaire de l'adresse se termine dans deux zéros (
00
), puisque, en binaire, c'est un multiple de la valeur binaire de4
(100b
). Le test de 4 octets aligné adresse est donc:ou tout simplement
La
0x3
est binaire11
ou un masque de la plus faible des deux bits de l'adresse.L'alignement est important car certains CPU opérations sont plus rapides si l'adresse d'un élément de données est aligné. C'est parce que les Processeurs 32-bit ou 64-bit word. De petites quantités de données (4 octets, par exemple) s'adaptent bien à un mot de 32 bits si c'est 4 octets aligné. Si elle n'est pas aligné, il peut traverser une limite de 32 bits et demandent de la mémoire supplémentaire extrait. Les Processeurs modernes ont d'autres optimisations ainsi que d'améliorer les performances de l'adresse de données alignées.
Voici un exemple d'article sur le thème de l'alignement et de la vitesse.
Voici quelques unes de nice les diagrammes d'alignement.