コンパイルに必要なメモリー量は、次の要素によって異なります。
各手続きのサイズ
最適化のレベル
仮想メモリーに対して設定された限度
ディスク上のスワップファイルのサイズ
SPARC プラットフォームでメモリーが足りなくなると、オプティマイザは最適化レベルを下げて現在の手続きを実行することでメモリー不足を補おうとします。それ以後のルーチンについては、コマンド行の -xOlevel オプションで指定した元のレベルに戻ります。
1 つのファイルに多数のルーチンが入っている場合、それをコンパイルすると、メモリーやスワップ領域が足りなくなることがあります。最適化のレベルを下げてみてください。代わりに、最大のプロシージャを、個別のファイルに分割してください。
現在のスワップ領域は swap -s コマンドで表示できます。詳細は、swap(1M) のマニュアルページを参照してください。
swap コマンドを使った例を次に示します。
example% swap -s total: 40236k bytes allocated + 7280k reserved = 47516k used, 1058708k available
ワークステーションのスワップ領域を増やすには、mkfile(1M) と swap(1M) コマンドを使用します。そのためには、スーパーユーザーである必要があります。mkfile コマンドは特定サイズのファイルを作成し、swap -a はこのファイルをシステムのスワップ領域に追加します。
example# mkfile -v 90m /home/swapfile /home/swapfile 94317840 bytes example# /usr/sbin/swap -a /home/swapfile
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
最適な設定は、必要な最適化レベルと使用可能な実メモリーと仮想メモリーの量によって異なります。
ワークステーションには、少なくとも 2G バイトのメモリーを実装する必要があります。詳細な要件については、製品のリリースノートを参照してください。