最適化レベル -O3 以上のレベルで大規模なルーチン (1 つの手続きが数千行ものコードで構成されるルーチン) をコンパイルすると、メモリーがさらに必要になる場合があり、コンパイル時間のパフォーマンスが低下することもあります。これを制御するには、1 つのプロセスで使用できる仮想メモリーの量を制限します。
sh シェルでは、ulimit コマンドを使用します。sh(1) を参照してください。
demo$ ulimit -d 16000 |
csh シェルでは、limit コマンドを使用します。csh(1) を参照してください。
例: 仮想メモリーを 16M バイトに制限します。
demo% limit datasize 16M |
いずれの場合も、オプティマイザは 16M バイトのデータ領域で最適化を再実行します。
この制限はマシンで利用可能なスワップ領域の総量を超えることはできないので、実際は、大規模なコンパイルの進行中であってもマシンを普通に使用できる程度の小さい値を指定してください。コンパイル処理でスワップ領域の半分以上が使用されることのないように注意してください。
例: 32M バイトのスワップ領域のあるマシンでは、次のコマンドを使用します。
sh シェルの場合:
demo$ ulimit -d 1600 |
csh の場合
demo% limit datasize 16M |
最適な設定は、最適化のレベルや、利用可能な実メモリーと仮想メモリーの量によって異なります。
64 ビットの Solaris 環境では、アプリケーションデータセグメントのサイズに対する弱い制限値は 2G バイトです。データ領域の追加割り当てが必要な場合は、シェルの limit または ulimit コマンドを使用して制限を解除します。
csh の場合:
demo% limit datasize unlimited |
sh、ksh の場合:
demo$ ulimit -d unlimited |
詳細は、『Solaris 64 ビット開発ガイド』を参照してください。