-qalign

説明

コンパイラーがファイルのコンパイルに使用する集合体の位置合わせ規則を指定する。このオプションを使用して、 ソース・プログラム全体または特定の部分のいずれかについて、 クラス型オブジェクトのマップ時に使用する最大の位置合わせを指定します。

構文

構文図を読む構文図をスキップする                    .-linuxppc---.
>>- -q--align--=--+-bit_packed-+-------------------------------><
 

使用可能な位置合わせのオプションは、以下のとおりです。

linuxppc コンパイラーはデフォルトの GNU C/C++ 位置合わせ規則を使用して、GNU C/C++ オブジェクトとの互換性を保持します。これがデフォルトです。
bit_packed コンパイラーは、bit_packed の位置合わせ規則を使用します。 このサブオプションは、GCC の -fpack-struct オプションに似ています。

コマンド行で -qalign オプションを複数回使用した場合は、 最後に指定した位置合わせ規則がファイルに適用されます。

#pragma align(alignment_rule) を使用して -qalign コンパイラー・オプションの設定をオーバーライドすることにより、コードのサブセットの位置合わせを制御することができます。#pragma align(reset) を使用すると、直前の位置合わせ規則に戻すことができます。 コンパイラーは位置合わせディレクティブをスタックします。そのため、#pragma align(reset) ディレクティブを指定すると、直前の位置合わせディレクティブが何であったかを知らなくても、その規則に戻して使用することができます。例えば、組み込みファイル内にクラス宣言があり、 そのクラスに対して指定した位置合わせ規則をクラスの組み込み先に適用したくない場合に、 このオプションを使用することができます。

例 1 - 集合体の定義にのみ影響

以下のコンパイラー呼び出しを使用します。

xlc++ file2.C /* <-- default alignment rule for file is                 */
            /*     linuxppc because no alignment rule specified */

ここで、file2.C は以下を持ちます。

extern struct A A1;
typedef struct A A2;

#pragma options align=bit_packed /* <-- use bit_packed alignment rules*/
struct A {
  int a;
  char c;
};
#pragma options align=reset /* <-- Go back to default alignment rules */

struct A A1;  /* <-- aligned using bit_packed alignment rules since   */
A2 A3;        /*     this rule applied when struct A was defined      */

例 2 - 組み込みプラグマ

以下のコンパイラー呼び出しを使用します。

xlc -qalign=linuxppc file.c  /* <-- default alignment rule for file */
                           /*    is linuxppc                        */

ここで、file.c は以下を持ちます。

struct A {
  int a;
  struct B {
  char c;
    double d;
#pragma options align=bit_packed /* <-- B will be unaffected by this  */
                            /*     #pragma, unlike previous behavior; */
                            /*     linuxppc alignment rules still    */
                            /*     in effect                          */
  } BB;
#pragma options align=reset /* <-- A is unaffected by this #pragma;   */
} AA;                       /*     linuxppc alignment rules still    */
                            /*     in effect                          */

関連情報