« Programmation C/Types avancés » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 73 :
Il s'agit d'un concept relativement avancé, mais qu'il est bien de connaitre pour agir en connaissance de cause. Lorsqu'on déclare une structure, on pourrait naïvement croire que les champs se suivent les uns à la suite des autres en mémoire. Or, il arrive souvent qu'une partie de la mémoire ne soit pas utilisée.
Considérez
<source lang="c">
Ligne 89 :
Ce comportement est en fait, non seulement dépendant de l'architecture, mais aussi du compilateur. Ce dernier possède en général des options qui permettent de paramétrer avec quelle finesse se fera l'alignement. Ces options sont bien évidemment spécifiques et pas du tout portables.
Dans le cas d'un ordinateur dit « 32 bits », par exemple (
<pre>
Ligne 140 :
Sur une architecture 32 bits, vous obtiendrez très certainement la réponse:
<pre>L'offset de 'champ2' vaut 4.</pre>
En fait toute cette section était pour souligner le fait qu'il est difficilement portable de comparer les structures comme des blocs binaires (via la fonction <code>memcmp</code> par exemple), car il n'y a aucune garantie que ces octets de bourrage soient intialisés à une certaine valeur. Si vous voulez comparer une structure, il est nécessaire d'y procéder champ par champ.
=== Pointeurs vers structures ===
|