32ビットx86PAE Linuxカーネルを使用している場合、システムにGiBの空きメモリが多い場合でも、1つのアプリケーションで2つを超えるGiBを割り当てることができないというのは本当ですか?この制限は64ビットx86Linuxカーネルによって緩和されていますか?
32ビットプロセスには、定義上、32ビットのアドレス空間があります。「32ビット」とは、プロセス内のメモリアドレスが32ビット幅であることを意味します。32 最大2つまでアドレス指定できる個別のアドレス32 バイト(4GB)。 32ビットLinuxカーネルは、32ビットプロセスのみを実行できます。カーネルのコンパイルオプションに応じて、各プロセスは1GB、2GB、または3GBのメモリしか割り当てることができません(残りは、システムコールを処理するときにカーネル用に予約されています)。これは仮想メモリの量であり、RAM、スワップ、およびマップされたファイル間の内訳とは関係ありません。
64ビットカーネルは、32ビットプロセスだけでなく64ビットプロセスも実行できます。 64ビットプロセスは最大2つまでアドレス指定できます64 原則としてバイト(16EB)。 x86_64アーキテクチャ では、x86_64 [〜#〜] mmu [〜#〜] sの設計もあり、現在、1つあたり128TBのアドレス空間に制限があります。処理する。
32ビットプロセスは、32ビットカーネルの構築時に選択されたメモリ分割に応じて、最大1、2、3、または約4GBしか割り当てることができません。 64ビットカーネル上の32ビットプロセスは、約4GBを割り当てることができます。 64ビットx86-64カーネル上の64ビットプロセスは、 最大128TiB を割り当てることができます。