32ビットは2までの数を表すことができるので32 − 1 = 4294967295 = 4 GiB − 1、したがって最大2までアドレス指定32 4 GiBの場合、個々のバイト。
ただし、それを回避する方法はいくつかあります。たとえば [〜#〜] pae [〜#〜] を使用すると、32ビットオペレーティングシステムでもより多くのメモリをサポートできます。歴史的には、これはサーバーで最も一般的に使用されてきました。また、サーバー以外のWindows SKUではサポートされていません。ただし、64ビットCPU、OS、およびドライバーのサポートが一般的であることを考えると、現時点ではすべてが問題になっています。
メモリの各バイトにはアドレスが必要だからです。 32ビットオペレーティングシステムでは、アドレスは32ビット長です。したがって、2 ^ 32の可能なアドレスがあります。つまり、2 ^ 32バイト= 4 GBです。
誰もが2 ^ 32 = 4GiBと言っていますが、これは正しいです。念のため、ここに私たちがそこに着いた方法があります:
32ビットマシンは32ビットを使用してメモリをアドレス指定します。各ビットの値は0または1です。1ビットの場合、2つの可能なアドレス:0または1があります。 2、11 = 3。 2 ^ 2 = 4。 3ビットには8つの可能なアドレスがあります。000= 0、001 = 1、010 = 2、011 = 3、100 = 4、101 = 5、110 = 6、および111 = 7です。
各ビットは潜在的なアドレス空間を2倍にします。そのため、2 ^ nは、指定されたビット数に使用するアドレス数を示します。 2 ^ 1 = 2、2 ^ 2 = 2 * 2 = 4、2 ^ 3 = 2 * 2 * 2 = 8など。
32ビットになるまでに、4GiBになります。
4 GB = 2 ^ 32バイト。
2 ^ 32 = 4 * 1024 * 1024 * 1024
それは、バイトで、4 GBの定義です。つまり、メモリポインタとしての32ビットレジスタは、4 GBのメモリのみをアドレス指定できます。
実際には、2 ^ 32 = 4294967296バイトほど単純ではありません。ページング変換メカニズムがクライアントアプリケーションに対して透過的であるとしても、ページングが有効になっている(つまり、最新のOSを使用したときに得られるもの)x86保護モードでは、メモリの場所を直接アドレス指定しません。
4Kページを使用する場合の論理32ビットメモリアドレス:
ご覧のとおり、2 ^ 10(1024)ページディレクトリがあり、各ページディレクトリには2 ^ 10ページテーブルがあり、各ページの長さは2 ^ 12(4096)バイトなので、2 ^ 32 = 4294967296バイトです。メモリバスの幅は、CPUのワード長と同じであるのが便利ですが、このようにする必要はまったくありません。実際、最新のx86 CPUはPAEをサポートしており、32ビットモードでも4GB(またはGiB)以上のアドレス指定が可能です。
これは、Wordに格納できるさまざまなメモリアドレス(バイト単位)の量です。
しかし、実際には、常にそうであるとは限りません(ほとんどの場合そうではありません)。OSは(PAEを使用して)それよりも多くの物理メモリを処理でき、アプリケーションは4 GB未満の仮想メモリを使用できます(その仮想メモリの一部であるため)メモリはOSにマップされます(たとえば、Linuxでは1GB、Windowsでは2GB)。
それが当てはまらないもう1つのシナリオは、メモリがバイトではなくワードによってアドレス指定されている場合、アドレス可能なメモリの合計は、たとえば16GBになります。
0..2^32
= 0..4,294,967,296
2 ^ 32 [〜#〜] b [〜#〜] = 4,194,304 KiB = 4,194 MiB = 4 GiB =
主に32ビットOSが2 ^ 32-1アドレスのみをサポートすることを選択したためです。
CPUがFSBに32を超えるアドレスラインを備えている場合、32ビットOSはページングメカニズムを使用して4GiBを超えるアクセスを選択できます。 (たとえば、PAEがサポートするIntel/AMDチップ上のWindows 2000 Advanced Server/Data Centerエディション)
4 GB = 2 ^ 32バイト。ただし、32ビットOSによって割り当てられた最大4 GBを覚えておいてください。実際には、OSの表示は少なくなります。 VRAM割り当て後。
他のユーザーが以前に述べたように、32ビットWindows OSは32ビットワードを使用してメモリアドレスを格納します。
実際、最近の32ビットチップのほとんどは、Intelの物理アドレス拡張(PAE)モデルを使用した36ビットアドレス指定を使用しています。一部のオペレーティングシステムはこれを直接サポートします(Linuxなど)。
Raymond Chenが指摘するように、Windowsでは 2ビットのアプリケーションは4GBを超えるメモリを割り当てることができ、64ビットのWindowsを使用する必要はありません 。またはPAE。
さらに言えば、64ビットチップは64ビットメモリ空間全体をサポートしていません。現在、42ビットスペースに制限されていると思います... PAEが使用する36ビットスペースと上位8ビットアドレス、