単一ライブラリー内のオブジェクトおよびファイルには、優先順位番号を割り当てることができます。オブジェクトは、その優先順位に従って実行時に初期化されます。ただし、モジュールのロード方法が異なり、オブジェクトが異なるプラットフォーム上で初期化されるため、優先順位を割り当てられるレベルは、次のように、プラットフォームによって違います。
AIX に限って、それ以外に、
-qmkshrobj コンパイラー・オプションの優先順位サブオプションを使用して、共用ライブラリー全体の優先順位を設定することもできます。AIX では、ロードと初期化は別々のプロセスとして発生するので、ファイル (またはファイル内のオブジェクト) に割り当てられる優先順位番号は、ライブラリーに割り当てられる優先順位番号とはまったく無関係であり、シーケンスに従う必要はありません。
優先順位番号の範囲は、
-2147483643 から 2147483647 までです。ただし、-2147483648 〜 -2147482624 までの番号はシステム用になっています。指定できる最小の優先順位番号は -2147482623 で、この番号のものが最初に初期化されます。最大の優先順位番号は 2147483647 で、この番号のものが最後に初期化されます。優先順位が指定されていない場合、デフォルトの優先順位は 0 (ゼロ) になります。
優先順位番号の範囲は 101 から 65535 までです。指定できる最小の優先順位番号は 101 で、この番号のものが最初に初期化されます。最大の優先順位番号は 65535 であり、この番号のものが最後に初期化されます。優先順位が指定されていない場合、デフォルトの優先順位は 65535 になります。
以下の例は、単一ファイル内のオブジェクト、および 2 つのファイル間のオブジェクトの優先順位を指定する方法を示したものです。 ライブラリー間のオブジェクト初期化の順序には、 Linux プラットフォームでのオブジェクトの初期化順序に関する詳細情報が記載されています。
次の例は、ソース・ファイル内のいくつかのオブジェクトの優先順位の指定方法を示しています。
... #pragma priority(2000) //Following objects constructed with priority 2000 ... static Base a ; House b ; ... #pragma priority(3000) //Following objects constructed with priority 3000 ... Barn c ; ... #pragma priority(2500) // Error - priority number must be larger // than preceding number (3000) ... #pragma priority(4000) //Following objects constructed with priority 4000 ... Garage d ; ...
次の例は、farm.C と zoo.C の 2 つのファイル内のオブジェクトの初期化の順序を記述したものです。
2 つのファイルは、ともに #pragma priority ディレクティブを使用し、
-qpriority オプションでコンパイルされています。
farm.C -qpriority=2000 | zoo.C -qpriority=2000 |
---|---|
#pragma priority(3000) ... Dog a ; Dog b ; ... #pragma priority(6000) ... Cat c ; Cow d ; ... #pragma priority(7000) Mouse e ; ... |
... Lion k ; #pragma priority(4000) Bear m ; ... #pragma priority(5000) ... Zebra n ; Snake s ; ... #pragma priority(8000) Frog f ; ... |
実行時には、これらのファイル内のオブジェクトは、次の順序で初期化されます。
シーケンス | オブジェクト | 優先順位の値 | コメント |
---|---|---|---|
1 | Lion k | 2000 | ファイル zoo.o の優先順位番号 (2000) を使用 (最初に初期化)。 |
2 | Dog a | 3000 | pragma の優先順位 (3000) を使用。 |
3 | Dog b | 3000 | Dog a と同じ。 |
4 | Bear m | 4000 | pragma で指定された、次の優先順位番号 (4000)。 |
5 | Zebra n | 5000 | pragma で指定された、次の優先順位番号 (5000)。 |
6 | Snake s | 5000 | 同じ優先順位で続く。 |
7 | Cat c | 6000 | 次の優先順位番号。 |
8 | Cow d | 6000 | 同じ優先順位で続く。 |
9 | Mouse e | 7000 | 次の優先順位番号。 |
10 | Frog f | 8000 | 次の優先順位番号 (最後に初期化)。 |