インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
このトピックは、Linux* にのみ適用されます。
インテル® 64 アーキテクチャー向けに設計されたアプリケーションは、次のいずれかのメモリーモデルを使用してビルドすることができます。
small (-mcmodel=small)
コードとデータのすべてのアクセスが、命令ポインター (IP) 相対アドレス指定で行われるように、コードとデータはアドレス空間の最初の 2GB までに制限されます。
medium (-mcmodel=medium)
コードはアドレス空間の最初の 2GB までに制限されますが、データは制限されません。コードは IP 相対アドレス指定でアクセスできますが、データのアクセスは絶対アドレス指定を使用する必要があります。
large (-mcmodel=large)
コードもデータも制限されません。コードもデータもアクセスは絶対アドレス指定を使用します。
IP 相対アドレス指定は 32 ビットのみ必要ですが、絶対アドレス指定は 64 ビット必要です。これは、コードサイズとパフォーマンスに影響します。(IP 相対アドレス指定の方が多少速くアクセスできます。)
medium メモリーモデルまたは large メモリーモデルを指定した場合、インテルのランタイム・ライブラリーの適切なダイナミック・バージョンが使用されるように、-shared-intel コンパイラー・オプションも指定する必要があります。
共有オブジェクト (.so) をビルドすると、位置独立コード (PIC) が指定されるため (つまり、コンパイラー・ドライバーにより -fpic が追加されるため)、単一の .so で 3 つのメモリーモデルすべてをサポートすることができます。ただし、スタティック・ライブラリーに配置されるコード、または静的にリンクされるコードは、適切なメモリーモデルを指定してビルドする必要があります。medium メモリーモデルまたは large メモリーモデルを指定すると、パフォーマンスに影響を与える点に注意してください。
64 ビット・メモリー拡張に対応したプロセッサー用の 64 ビットのアプリケーション・バイナリー・インターフェイス (ABI) で規定されているコードモデルでは、メモリーモデル (medium、large) オプションと -shared-intel オプションを使用する必要があります。コンパイラーと GNU* リンカー (ld) により、指定されたメモリーモデルに従って、このプラットフォーム上で適切なコードの生成と必要な再配置が行われます。
インテル® 64 アーキテクチャーの 2GB の制限は、2GB を超える配列だけでなく、合計が 2GB を超える共通ブロックとローカルデータにも適用されます。「コンパイラー・オプション」には、サポートされているメモリーモデルに関する追加情報と、各モデルの 2GB の制限に関する詳細情報があります (mcmodel オプションの説明を参照)。
リンク時に、適切なメモリー・モデル・オプションとダイナミック・ライブラリー・オプションを使用しないと、次の形式のエラーメッセージが表示されます。
<some lib.a library>(some .o): In Function <function>: : relocation truncated to fit: R_X86_64_PC32 <some symbol>