Solaris 10 ご使用にあたって

x86: x86 システムでのアプリケーションのメモリー割り当て制限

Solaris のアプリケーションは、malloc()brk()mmap() などの関数を使用してメモリーを割り当てます。アプリケーションで割り当てることのできるメモリーの最大量は、ユーザー仮想アドレス空間のサイズによって制限されます。ユーザー仮想アドレス空間に含まれているプログラムのテキスト、スタック、データ、ライブラリなどによって、メモリー割り当ての最大サイズがさらに減少することもあります。

32 ビットコンピューティング環境

32 ビットコンピューティング環境では、ユーザーとカーネルの間で 32 ビット仮想アドレス空間が共有されます。したがって、ユーザー仮想アドレス空間のサイズは、4G バイトからカーネル仮想アドレス空間のサイズを引いたものとなります。カーネル仮想アドレス空間のサイズは、物理メモリーのサイズに応じて決まります。物理メモリーのサイズが大きくなるほど、ユーザー仮想アドレス空間のサイズは小さくなります。8G バイトのメモリーを備えたシステムの場合、ユーザー仮想アドレス空間のサイズは約 3G バイトです。

メモリー割り当て制限のためアプリケーションに十分なメモリーが得られない場合は、次の 2 つの方法があります。

64 ビットコンピューティング環境

64 ビットコンピューティング環境では、32 ビットアプリケーション用の仮想アドレス空間はすべてユーザー用となります。したがって、32 ビットアプリケーションでは、4G バイトからテキスト、スタック、およびライブラリに必要なユーザーアドレス空間を引いた残りすべてを割り当てることができます。

初期の 64 ビット AMD プロセッサの一部では、メモリー割り当て上限がさらに 1G バイト少なくなる場合があります。使用しているプロセッサがこの影響を受けるかどうかを調べるには、次の手順を実行します。

  1. 任意の 32 ビットシェルから、コマンド pmap $$ を実行します。

  2. プロセスマップで、0xC0000000 以上のアドレスが表示されるかどうかを確認します。このようなアドレスが存在しない場合は、Solaris OS によって 32 ビットアプリケーションが制限され、4G バイトの仮想アドレス空間のうち下位の 3G バイトになっています。

64 ビットアプリケーションは、すでに使用中のメモリーに応じて 250T バイトまで割り当てることができます。