アプリケーション開発者にとって、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 兆です。
カーネルメモリーの読み取り
カーネルは LP64 オブジェクトであり、内部では 64 ビットのデータ構造を使用するため、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 ビット版では、整数の演算やパラメタの引き渡しに、マシンの 64 ビットレジスタを全面的に使用できるようになりました。
大容量のファイル
アプリケーションが必要としているのが大容量ファイルのサポートだけである場合は、32 ビットのままで大容量ファイルのインタフェースを使用することもできます。ただし、64 ビットの機能を最大限に活かすためには 64 ビットに変換することをお勧めします。