64 ビット x86 Linux システムでは、アプリケーションはどのくらいの RAM を割り当てることができますか?

64 ビット x86 Linux システムでは、アプリケーションはどのくらいの RAM を割り当てることができますか?

32 ビット x86 PAE Linux カーネルを使用している場合、システムに 2 GiB 以上の空きメモリがあっても、単一のアプリケーションは 2 GiB 以上を割り当てることができないというのは本当ですか? この制限は 64 ビット x86 Linux カーネルによって緩和されますか?

答え1

32 ビット プロセスには、定義により 32 ビットのアドレス空間があります。「32 ビット」とは、プロセス内のメモリ アドレスが 32 ビット幅であることを意味し、2 32 個の異なるアドレスがある場合、最大 2 32バイト (4 GB) をアドレス指定できます。32 ビット Linux カーネルは、32 ビット プロセスのみを実行できます。カーネルのコンパイル オプションに応じて、各プロセスは 1 GB、2 GB、または 3 GB のメモリのみを割り当てることができます (残りは、システム コールを処理するときにカーネル用に予約されます)。これは仮想メモリの量であり、RAM、スワップ、および mmap ファイル間の内訳とは無関係です。

64ビットカーネルは、32ビットプロセスと同様に64ビットプロセスを実行できます。64ビットプロセスは、原則として最大264バイト(16EB)をアドレス指定できます。x86_64 アーキテクチャ、x86_64の設計によるところが大きいMMUただし、現在、プロセスあたり 128 TB のアドレス空間に制限があります。

答え2

32ビットプロセスは、32ビットカーネルの構築時に選択されたメモリ分割に応じて、最大1、2、3、または約4GBしか割り当てることができません。64ビットカーネル上の32ビットプロセスは約4GBを割り当てることができます。64ビットx86-64カーネル上の64ビットプロセスは、最大128TiB

関連情報