1 つの手続きが数千行からなるような非常に大きなルーチンを -xO3 以上でコンパイルすると、大容量のメモリーが必要になることがあります。このようなときには、システムのパフォーマンスが低下します。これを制御するには、1 つのプロセスで使用できる仮想メモリーの量を制限します。
sh シェルで仮想メモリーを制限するには、ulimit コマンドを使用します。詳細は、sh(1) のマニュアルページを参照してください。
次の例では、仮想メモリーを 4G バイトに制限しています。
example$ ulimit -d 4000000 |
csh シェルで仮想メモリーを制限するには、limit コマンドを使用します。 詳細は、csh(1) のマニュアルページを参照してください。
次の例でも、仮想メモリーを 4G バイトに制限しています。
example% limit datasize 4G |
どちらの例でも、オプティマイザは データ空間が 4G バイトになった時点でメモリー不足が発生しないような手段をとります。
仮想メモリーの限度は、システムの合計スワップ領域の範囲内です。さらに実際は、大きなコンパイルが行われているときにシステムが正常に動作できるだけの小さい値である必要があります。
スワップ領域の半分以上がコンパイルによって使用されることがないようにしてください。
8G バイトのスワップ領域のあるマシンでは、次のコマンドを使用します。
sh シェルの場合
example$ ulimit -d 4000000 |
csh の場合
example% limit datasize 4G |
最適な設定は、必要な最適化レベルと使用可能な実メモリーと仮想メモリーの量によって異なります。