Alignement de données

Alignement de données

Alignement de données

L'Alignement de données est la façon dont les données sont organisées en mémoire. En effet, en informatique, les compilateurs sont souvent obligés, pour des raisons de performance et pour faciliter l'exécution du code d'aligner les données en mémoire.

Un type de donnée de taille n doit être placé à une adresse multiple de n.

La taille d'une structure est multiple de la taille du registre du processeur (32 bits le plus souvent).

Exemple

Prenons un exemple en langage C

Soit deux structures de données :

typedef struct _noalign
{
    char c;
    double d;
    int i;
    char c2[3];
}noalign;
 
typedef struct _align
{
    double d;
    int i;
    char c2[3];
    char c;
}align;

Les deux structures contiennent les mêmes champs, on pourrait croire qu'elles ont la même taille. Et sachant que :

les champs de type char sont codés sur 1 octet,
les champs de type int sont codés sur 4 octets,
les champs de type double sont codés sur 8 octets.

(pour un compilateur sur une architecture et un système d'exploitation donné)

La taille totale devrait être 1+8+4+3*1 = 16 octets

or

printf("noalign %d\n",sizeof(noalign));
printf("align %d\n",sizeof(align));

affichent respectivement 24 et 16.

En effet la structure align est bien alignée mais pas noalign.

Le compilateur rajoute des bits dits de "padding" pour respecter l'alignement. En fait, noalign ressemble à ceci

typedef struct _noalign_corrige
{
    char c;
    char _pad1[7];
    double d;
    int i;
    char c2[3];
    char _pad2;
}noalign_corrige;

On remarque que _pad1 permet à d de débuter à une adresse multiple de 8. _pad2 complète la structure pour atteindre 24 (multiple de la taille du processeur)

Compilateur

Sous gcc l'option -Wpadded permet de savoir si une structure est alignée ou pas.

Voici les messages obtenus lors de la compilation de la structure noalign

Warning padding struct to align 'd' 
Warning padding struct size to alignment boundary

Conclusion

L'alignement de donnée dépend fortement de l'architecture et du compilateur. Il est important de connaitre ces problèmes surtout lorsque la place mémoire est importante ainsi que pour la communication entre deux architectures différentes.

D'une manière générale, lors de déclarations consécutives de variables, préférez déclarer d'abord les variables occupant le plus de mémoire, dans la mesure du possible.

Ce document provient de « Alignement de donn%C3%A9es ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Alignement de données de Wikipédia en français (auteurs)

Игры ⚽ Нужно решить контрольную?

Regardez d'autres dictionnaires:

  • Alignement De Données — L Alignement de données est la façon dont les données sont organisées en mémoire. En effet, en informatique, les compilateurs sont souvent obligés, pour des raisons de performance et pour faciliter l exécution du code d aligner les données en… …   Wikipédia en Français

  • Alignement de donnees — Alignement de données L Alignement de données est la façon dont les données sont organisées en mémoire. En effet, en informatique, les compilateurs sont souvent obligés, pour des raisons de performance et pour faciliter l exécution du code d… …   Wikipédia en Français

  • Alignement — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. L alignement désigne de manière générale l ajustement d objets (ou l orientation statique d objets) les uns par rapport aux autres sur une même ligne… …   Wikipédia en Français

  • Alignement Stratégique — L alignement stratégique de l organisation (du système d information ou de la chaîne logistique) sur le métier est le fait de mettre en cohérence la stratégie du système d information (et de la logistique) avec la stratégie d entreprise et de la… …   Wikipédia en Français

  • Alignement strategique — Alignement stratégique L alignement stratégique de l organisation (du système d information ou de la chaîne logistique) sur le métier est le fait de mettre en cohérence la stratégie du système d information (et de la logistique) avec la stratégie …   Wikipédia en Français

  • Alignement stratégique du système d'information — Alignement stratégique L alignement stratégique de l organisation (du système d information ou de la chaîne logistique) sur le métier est le fait de mettre en cohérence la stratégie du système d information (et de la logistique) avec la stratégie …   Wikipédia en Français

  • Alignement De Séquences — Pour les articles homonymes, voir Alignement. En bio informatique, l alignement de séquences (ou alignement séquentiel) est une manière de disposer les composantes (nucléotides ou acides aminés) des ADN, des ARN, ou des séquences primaires de… …   Wikipédia en Français

  • Alignement Séquentiel — Alignement de séquences Pour les articles homonymes, voir Alignement. En bio informatique, l alignement de séquences (ou alignement séquentiel) est une manière de disposer les composantes (nucléotides ou acides aminés) des ADN, des ARN, ou des… …   Wikipédia en Français

  • Alignement de sequences — Alignement de séquences Pour les articles homonymes, voir Alignement. En bio informatique, l alignement de séquences (ou alignement séquentiel) est une manière de disposer les composantes (nucléotides ou acides aminés) des ADN, des ARN, ou des… …   Wikipédia en Français

  • Alignement de séquence — Alignement de séquences Pour les articles homonymes, voir Alignement. En bio informatique, l alignement de séquences (ou alignement séquentiel) est une manière de disposer les composantes (nucléotides ou acides aminés) des ADN, des ARN, ou des… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”