Offset (informatique)

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Offset.

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

Utilisation[modifier | modifier le code]

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 et de b).

Dans un tableau[modifier | modifier le code]

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.

En assembleur[modifier | modifier le code]

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