Sun Studio 12 Update 1: C++ ユーザーズガイド

2.6 メモリー条件

コンパイルに必要なメモリー量は、次の要素によって異なります。

SPARC プラットフォームでメモリーが足りなくなると、オプティマイザは最適化レベルを下げて現在の手続きを実行することでメモリー不足を補おうとします。それ以後のルーチンについては、コマンド行の -xOlevel オプションで指定した元のレベルに戻ります。

1 つのファイルに多数のルーチンが入っている場合、それをコンパイルすると、メモリーやスワップ領域が足りなくなることがあります。最適化のレベルを下げてみてください。代わりに、最大のプロシージャを、個別のファイルに分割してください。

2.6.1 スワップ領域のサイズ

現在のスワップ領域は swap -s コマンドで表示できます。詳細は、swap(1M) のマニュアルページを参照してください。

swap コマンドを使った例を次に示します。


example% swap -s
total: 40236k bytes allocated + 7280k reserved = 47516k used, 1058708k available

2.6.2 スワップ領域の増加

ワークステーションのスワップ領域を増やすには、mkfile(1M) と swap(1M) コマンドを使用します。そのためには、スーパーユーザーである必要があります。mkfile コマンドは特定サイズのファイルを作成し、swap -a はこのファイルをシステムのスワップ領域に追加します。


 example# mkfile -v 90m /home/swapfile
 /home/swapfile 94317840 bytes
 example# /usr/sbin/swap -a  /home/swapfile

2.6.3 仮想メモリーの制御

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

最適な設定は、必要な最適化レベルと使用可能な実メモリーと仮想メモリーの量によって異なります。

2.6.4 メモリー条件

ワークステーションには、少なくとも 1G バイトのメモリーを実装するべきです。2G バイトをお勧めします。要件の詳細は、製品リリースの Readme (http://developers.sun.com/sunstudio/documentation/ ) を参照してください。