コンパイラーでは、アプリケーション内のすべての変数がインポートされたものであると想定されますが、-qdatalocal および -qdataimported を使用することで、変数にローカル変数またはインポートされた変数としてマークを付けることができます。コンパイラーは、プログラム変数の静的バインディングまたは動的バインディングの指定に基づいて、アプリケーションを最適化します。
ローカル変数は、プログラムまたは共用ライブラリーに一意的にバインドされている、メモリーの特別なセグメントに格納されます。コンパイル済みプログラムまたは共用ライブラリーに対して変数がローカル変数として扱われるようにするには、-qdatalocal オプションを指定します。このオプションをパラメーターなしで指定すると、すべての該当する変数がローカル変数として扱われるようになります。または、コロンで区切った名前のリストをオプションに付加して、プログラム実引数のサブセットのみがローカル変数として扱われるようにすることもできます。
可能な場合は、ローカル変数としてマーク付けされた変数は、メモリー内の別のグローバルな部分にではなく、目次 (TOC) と呼ばれる構造体に直接組み込まれます。変数が TOC に組み込まれるためには、変数のストレージがポインターのサイズ以下であることが前提となります。通常、データへのポインターは、TOC に格納されます。-qdatalocal オプションを指定すると、データを TOC に直接格納できるため、ロード命令を 2 回から 1 回にして、データ・アクセスを減らすことができます。
インポートされた変数は、デフォルトのメモリー割り振りスキームに従って格納されます。-qdataimported オプションは、デフォルトのデータ・バインディングの仕組みです。このオプションを指定することは、リンクされている他のプログラムまたは共用ライブラリーからデータが可視であることを意味します。そのため、変数名を -qdataimported オプションに引数として指定しても、引数を指定せずに -qdataimported オプションを単独で使用してコンパイルしても、効果がありません。
-qdataimported オプションは、-qdatalocal オプションと組み合わせて使用すると便利です。 すべてのデータを TOC に保管しなければならないようなことはあり得ないため、プログラムまたは共用ライブラリーの外部の変数について、-qdatalocal オプションの指定を-qdataimported オプションでオーバーライドできます。例えば、-qdatalocal -qdataimported=<variable> というオプションを指定すると、<variable> を除く、すべてのグローバル・データが TOC に格納されます。