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'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 donnees 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 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 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 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

  • 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

  • Format De Données — Le format des données est la manière utilisée en informatique pour représenter des données sous forme de nombres binaires. C est une convention (éventuellement normalisée) utilisée pour représenter des données, soit des informations représentant… …   Wikipédia en Français

  • Format de donnees — Format de données Le format des données est la manière utilisée en informatique pour représenter des données sous forme de nombres binaires. C est une convention (éventuellement normalisée) utilisée pour représenter des données, soit des… …   Wikipédia en Français

  • Format de données — Le format des données est la manière utilisée en informatique pour représenter des données sous forme de nombres binaires. C est une convention (éventuellement normalisée) utilisée pour représenter des données des informations représentant un… …   Wikipédia en Français

  • Formats de données — Format de données Le format des données est la manière utilisée en informatique pour représenter des données sous forme de nombres binaires. C est une convention (éventuellement normalisée) utilisée pour représenter des données, soit 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”