Sun Studio 12 Update 1: Fortran ユーザーズガイド

3.4.117.1 位置独立コード

実行時のパフォーマンスを向上するために動的共有ライブラリを作成するときには、-xcode=pic13 または -xcode=pic32 を使用します。

動的実行可能ファイルのコードは、通常、メモリーの固定アドレスに結び付けられ、位置独立コードは、プロセスのどのようなアドレス空間でもロードすることができます。

位置独立コードを使用する場合は、大域オフセットテーブルを使用した直接的なリファレンスとして、再配置可能なリファレンスが作成されます。頻繁にアクセスされる共有オブジェクトの項目は、-xcode=pic13 または -xcode=pic32 を使用してコンパイルすると、位置独立コード以外のコードによって行われる多数の再配置が必要なくなるという利点があります。

大域オフセットテーブルのサイズは、8K バイトに制限されます。

-xcode={pic13|pic32} には、次のようなパフォーマンス上の影響があります。

こうした影響があるとしても、-xcode=pic13 または -xcode=pic32 を使用すると、ライブラリコードを共有できるため、必要となるシステムメモリーを大幅に減らすことができます。-xcode=pic13 または -xcode=pic32 でコンパイルした共有ライブラリ中のコードの各ページは、そのライブラリを使用する各プロセスで共有することができます。共有ライブラリ中にあるコードのページに 1 つでも -pic でコンパイルされていないメモリー参照 (直接メモリー参照) があると、このページは共有できなくなるため、ライブラリを使用したプログラムを実行するたびに、そのページのコピーが作成されます。

.o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされているかどうかを調べるには、nm コマンドを使用する方法がもっとも簡単です。

nm file.o | grep _GLOBAL_OFFSET_TABLE_

位置独立コードを含む .o ファイルには、_GLOBAL_OFFSET_TABLE_ への未解決の外部参照があります。未解決の参照は U の文字で示されます。

-xcode=pic13 または -xcode=pic32 のどちらを使用するか決定するときは、elfdump -c (詳細は elfdump(1) のマニュアルページを参照) を使用することによって、セクションヘッダー (sh_name: .got) を探して、大域オフセットテーブル (GOT) のサイズを調べてください。sh_size 値が GOT のサイズです。GOT のサイズが 8,192 バイトに満たない場合は -xcode=pic13、そうでない場合は -xcode=pic32 を指定します。

一般に、-xcode の使用方法の決定に際しては、次のガイドラインに従ってください。

動的ライブラリを構築する場合は、-xcode=pic13 または pic32 (または -pic または -PIC) オプションを使用してコンパイルしてください。Solaris の『リンカーとライブラリ』を参照してください。