En informatique, les contraintes d'alignement en mémoire limitent à certains multiples d'adresse mémoire, où certaines données et instructions machine peuvent être enregistrées. En outre, les optimisations d'alignement mémoire permettent d'influencer la vitesse d'exécution d'un programme uniquement en choisissant bien les adresses. Pour augmenter leurs performances, les processeurs sont souvent reliés à la mémoire vive par un bus de données plus large que la granularité de leur adressage : par exemple un processeur est capable d'adresser individuellement des octets (8 bits), relié à la mémoire par un bus de (32 bits). Si une donnée de ne se trouve pas à une adresse divisible par 4, alors, selon le modèle de processeur, il y a : violation de contrainte : une erreur d'alignement interrompt l'exécution des instructions ; alignement non optimal : deux fois bien alignés sont lus, puis les mal alignés sont extraits de ces , ce qui prend bien plus de temps que lire bien alignés. La règle généralement applicable pour qu'une donnée soit bien alignée, est qu'elle se trouve à une adresse divisible par sa taille. Ainsi, une donnée occupant un seul octet est toujours bien alignée, une donnée de deux octets est bien alignée si elle est à une adresse paire, une donnée de est bien alignée si elle est à une adresse divisible par 4, etc. Toutefois, la contrainte d'alignement n'excède pas le matériel sous-jacent. Les contraintes d'alignement en mémoire dépendent de l'architecture du processeur. L'optimisation de l'alignement est plus subtil, car il peut dépendre de la mémoire cache du processeur, de la pagination de la mémoire virtuelle, et autres caractéristiques de l'accès à la mémoire. Certains compilateurs permettent d'influencer l'alignement des données. Les processeurs RISC n'ont généralement qu'une seule taille d'instruction machine, et ces instructions doivent être bien alignées. En revanche, les processeurs CISC ont des instructions de tailles variables.
Rachid Guerraoui, Mihail Igor Zablotchi, Nachshon Cohen