(SPARC) 想定するメモリー境界整列の最大値と、境界整列に失敗したデータがアクセスされた際の動作を指定します。a (境界整列) と b (動作) の両方の値が必要です。a は、想定する最大メモリー境界整列です。b は、境界整列に失敗したメモリーへのアクセスに対する動作です。次に、-xmemalign の境界整列と動作の値を示します。
表 B–28 -xmemalign の境界整列と動作のフラグ
a |
b | ||
---|---|---|---|
1 |
最大 1 バイトの境界整列 |
i |
アクセスを解釈し、実行を継続する |
2 |
最大 2 バイトの境界整列 |
-s |
シグナル SIGBUS を発生させる |
4 |
最大 4 バイトの境界整列 |
f |
-xarch=v9 の不変式の場合にのみ、 4 バイト以下の境界整列に対してシグナル SIGBUS を発生させ、それ以外ではアクセスを解釈して実行を継続する 。そのほかすべての -xarch 値では、f フラグは i と同じです。 |
8 |
最大 8 バイトの境界整列 | ||
16 |
最大 16 バイトの境界整列 |
b を i か f のいずれかに設定してコンパイルしたオブジェクトファイルにリンクする 場合は、必ず、-xmemalign を指定する必要があります。表 A–2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。
コンパイル時に境界整列が判別できるメモリーへのアクセスの場合、コンパイラはそのデータの境界整列に適したロードおよびストア命令を生成します。
コンパイル時に境界整列が判別できないメモリーへのアクセスの場合、コンパイラは必要なロードおよびストア命令を生成するための境界整列を想定する必要があります。
-xmemalign オプションを使用すると、このような判別不可能な状況の時にコンパイラが想定するデータの最大メモリー境界整列を指定できます。-xmemalign オプションは、境界整列に失敗したメモリーへのアクセスが実行時に発生した場合に行われるエラー動作 (処理) についても指定できます。
次のデフォルトの値は、-xmemalign オプションがまったく指定されていない場合にのみ適用されます。
-xmemalgin=8i: すべての v8 アーキテクチャーに適用される。
-xmemalign=8s すべての v9 アーキテクチャーに適用される。
次に、-xmemalign オプションが指定されているが値を持たない場合のデフォルト値を示します。
-xmemalign=1i: すべての -xarch 値に使用される。
次の表は、-xmemalign で処理できるさまざまな境界整列の状況とそれに適した -xmemalign 指定を示しています。
表 B–29 -xmemalign の例
コマンド |
状況 |
---|---|
-xmemalign=1s |
境界整列されていないデータへのアクセスが多いため、トラップ処理が遅すぎる |
-xmemalign=8i |
コード内に境界整列されていないデータへのアクセスが意図的にいくつか含まれているが、それ以外は正しい |
-xmemalign=8s |
プログラム内に境界整列されていないデータへのアクセスは存在しないと思われる |
-xmemalign=2s |
奇数バイトへのアクセスが存在しないか検査したい |
-xmemalign=2i |
奇数バイトへのアクセスが存在しないか検査し、プログラムを実行したい |