このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

3.1 格納順序と位置合せ

データ型にはそれぞれ、プロセッサ・アーキテクチャにより決められた位置合せ要件があります。 処理するワード・サイズがプロセッサのデータ・バス・サイズと一致する場合は、プロセッサによるデータ処理が効率的に実行されます。 たとえば、32ビット・マシンでは4バイトのワード・サイズで処理されます。 図3.1は、適切に位置合せされた整数値がメモリーに格納されている様子を示しています。 位置合せされた4バイトの整数Aは、メモリーにA0A1A2およびA3として格納されます。 この整数が適切な位置合せで格納されているので、プロセッサは1回の32ビット・バス・サイクルでワード全体をフェッチできます。

図 3.1 メモリー内で適切に位置合せされた整数値

この図は、適切に位置合せされた2つの整数AおよびBが、それぞれ4バイトのメモリーに[A0] [A1] [A2] [A3]、[B0] [B1] [B2] [B3]として書き込まれている場合、整数ごとに1回のフェッチ操作でアクセスできる様子を示しています。


ここで、位置合せされていないアドレスにある整数変数Xに同じプロセッサでアクセスしようとすると、その読取りは1回のバス・サイクルでは実行できません。
図3.2は、適切に位置合せされていない整数値がメモリーに格納されている様子を示しています。

図 3.2 メモリー内で適切に位置合せされていない整数値

この図は、X0、X1、X2およびX3のバイトで構成された整数Xがメモリー内で適切にオフセットされていないために、そのバイトが2つのアドレス[?] [X0] [X1] [X2]と[X3] [?] [?] [?]にまたがって書き込まれている様子を示しています(ここで[?]はXに関連付けられていない任意のデータ・バイトです)。 この整数には、2回のフェッチ操作(1回はバイトX0、X1およびX2を、もう1回はX3をフェッチ)が必要です。


正しく位置合せされていない整数全体を読み取るには、プロセッサで2つのフェッチ指示を出す必要があるので、位置合せされた整数の2倍の時間がかかります。 つまり、メモリー・チャンクのアドレスは、各サイズの複数倍になっているはずです。 アドレスがこの要件を満たしていれば、適切に位置合せされているといえます。 位置合せされていないアドレスからデータにアクセスすると、実行が遅くなったりプログラムが終了するなど、様々な問題が発生する可能性があります。