コンピュータサイエンスでは、配列またはその他のデータ構造オブジェクト内のオフセットは、オブジェクトの開始位置と特定の要素または点との間の距離(変位)を示す整数であり、おそらく同じオブジェクト内です。 [ 1 ]: 100~103距離の概念は、オブジェクトのすべての要素が同じサイズ(通常はバイトまたはワードで指定)である場合にのみ有効です。
例えば、が を含む文字の配列Aである場合、 文字を含む 4 番目の要素は の先頭から 3 のオフセットを持ちます。"abcdef"'d'A
コンピュータ工学や低レベルプログラミング(アセンブリ言語など)において、オフセットは通常、特定の絶対アドレスに到達するためにベースアドレスに追加されるアドレス位置の数を表します。この(本来の)オフセットの意味では、オフセットのサイズを指定するために、通常は8ビットのバイトである基本アドレス単位のみが使用されます。この文脈では、オフセットは相対アドレスと呼ばれることもあります。
IBM System/360 の命令では、特定の命令に埋め込まれた 12 ビットのオフセットによって、0 バイトから 4096 バイトまでの範囲が示されました。たとえば、無条件分岐命令 (X'47F0Fxxx') では、xxx という 12 ビットの 16 進オフセットによって、分岐先のベース レジスタ (15) からのバイト オフセットが示されました。オフセットが奇数の場合、プログラム チェックが行われました (ベース レジスタ自体にも奇数アドレスが含まれていない場合)。これは、プログラムまたはハードウェア割り込みなしで実行するには、命令がハーフ ワード境界にアラインされている必要があったためです。
前の例では、セグメント:オフセットの形式でメモリ位置を指定する間接的な方法について説明しました。たとえば、メモリ位置 0xF867 を参照したいとします。これを実現する方法の 1 つは、まず開始アドレス 0xF000 のセグメントを定義し、次にオフセット 0x0867 を定義することです。さらに、16 進セグメントをシフトして最終的な絶対メモリ アドレスに到達することもできます。ここで注意すべき点は、最終的な絶対アドレスに到達する方法は複数あるということです。
オフセットは必ずしもモジュールのベースアドレスを基準とするとは限りません。たとえば、クラスがあり、そのクラスの「color」属性を取得したい場合、オフセットは0x0100かもしれませんが、このオフセットはベースアドレスではなく、クラス自体のオフセットに加算する必要があります。クラスのオフセットが0xFF881で、ベースアドレスが0x0A100の場合、「color」属性を取得するには、両方のオフセットをベースアドレスに加算します。0x0A100(ベース)+ 0xFF881(クラス)+ 0x0100(属性)。最終的に、属性のアドレスは0x109A81になります。