アプリケーションの開発者にとって、Solaris 64 ビットオペレーティング環境と 32 ビットオペレーティング環境の主な違いは、使用される C 言語データ型モデルです。64 ビットのデータ型では、long 型とポインタが 64 ビット幅の、LP64 モデルを使用します。その他の基本データ型は 32 ビット版と同じです。32 ビットのデータ型は、int、long、およびポインタが 32 ビットの、ILP 32 モデルを使用します。
64 ビット環境を使用する場合の、主な特徴と注意すべき点について、以下に簡単に説明します。
巨大な仮想アドレス空間
64 ビット環境では、プロセスは最大 64 ビットすなわち 18E (エクサ) バイトの仮想アドレス空間を持つことができます。これは、32 ビット環境における現時点の最大 4G バイトの 40 億倍にあたります。ただし、ハードウェアの制約上、一部のプラットフォームでは 64 ビットのアドレス空間を完全にはサポートしていません。
巨大なアドレス空間では、デフォルトのスタックサイズで作成できるスレッドの数も多くなります。デフォルトのスタックサイズは、32 ビット版では 1M バイト、64 ビット版では 2M バイトです。デフォルトのスタックサイズで作成できるスレッドの数は、32 ビットシステムで約 2000、64 ビットシステムで約 8 兆です。
カーネルメモリーの読み取り
64 ビットカーネルは、内部的に 64 ビットデータ構造を使用する LP64 オブジェクトです。このため、libkvm、/dev/mem、/dev/kmem を使用する既存の 32 ビットアプリケーションは正しく動作しません。64 ビットプログラムに変換する必要があります。
/proc の制限
/proc を使用する 32 ビットプログラムでは、32 ビットプロセスは認識されますが、64 ビットプロセスは認識されません。プロセスを記述する既存のインタフェースとデータ構造は、64 ビットのプロセスを収容できるだけの容量がありません。これらのプログラムが 32 ビットと 64 ビットの両プロセスに対して動作できるようにするには、64 ビットプログラムとしてコンパイルし直す必要があります。
64 ビットライブラリ
32 ビットアプリケーションは 32 ビットのライブラリと、64 ビットアプリケーションは 64 ビットのライブラリとリンクしている必要があります。システムライブラリには、古くなったもの以外はすべて、32 ビットと 64 ビットの両方が用意されています。
64 ビット演算
64 ビット 演算は以前の 32 ビット版 Solaris リリースで長い間使用されてきました。64 ビット実装では、整数の演算やパラメータの引き渡しに、マシンの 64 ビットレジスタを全面的に使用できるようになりました。
大規模ファイル
アプリケーションが大容量ファイルのサポートしか要求していない場合、32 ビットのままで大容量ファイルのインタフェースを使用することができます。ただし、64 ビットの機能を最大限に活かすためには、64 ビットアプリケーションに変換することをお勧めします。