Offset (informatique)

Un article de Wikipédia, l'encyclopédie libre.

Pour les articles homonymes, voir Offset.

Offset est un terme anglais qui en informatique désigne une adresse relative. L'offset est une valeur entière représentant le déplacement en mémoire, par rapport à une adresse de référence, nécessaire pour atteindre une autre adresse. Autrement dit, l'offset est la distance séparant deux emplacements mémoire.

Sommaire

[modifier] Utilisation

Ainsi, l'offset est utilisé dans la manipulation des tableaux, ou de tout autres structures de données contiguës en mémoire.

L'unité utilisée pour calculer un offset est la plupart du temps la taille de l'élément le plus petit adressable directement ; il s'agit dans la plupart des architectures de l'octet. La position exacte d'un objet en mémoire peut se calculer simplement par la formule :

adresse absolue = adresse de base + offset * taille d'un élément

Ainsi, dans la structure suivante (en C#) :

struct exemple {
   Byte  a;
   Int16 b;
   Int32 c;
}

l'offset de l'élément b sera de 1 octet (taille de l'élément a) ; l'offset de l'élément c sera 3 octets (taille de a plus taille de b).

[modifier] Offset dans un tableau

Dans le cas d'une position relative au sein d'un tableau, l'unité de calcul sera la taille des éléments du tableau. Ainsi, le nième élément d'un tableau sera toujours à l'offset n-1 quels que soient les éléments du tableau. Le terme anglais index désigne le numéro représentant l'élément. Il correspond exactement à l'offset dans le cas de langages tels que C. Dans d'autres langages, le premier élément ne portant pas nécessairement le numéro 0, il peut exister un décalage entre l'index d'un élément et son offset.

Dans un tableau défini en Visual Basic par :

Dim tableau(2 To 5) As Integer

ou en Pascal par :

tableau : array[2..5] of Integer

l'index du troisième élément sera 4, tandis que son offset sera 2.

[modifier] En assembleur

En assembleur, l'offset est utilisé conjointement avec une adresse de segment afin de déterminer l'adresse d'une portion de ma mémoire.