1

4G RAM の場合、4 * 1024 * 1024 * 1024 * 8 = 2^(32+3) ビットです。私の質問は、32 ビット PC がどのようにして 4G メモリにアクセスできるかということです。これについて私が考えることができるのは、「バイトは記憶単位であり、データをビットに格納することはできません」ということです。これは正しいです?

別の質問: そのような PC では、ポインターのサイズは常に 32 ビットですか? データを格納するために 2^32 のストレージ ユニットがあるため、私には妥当なように思えます。しかし、この回答と次の発言では、これは間違っていると言われています。間違っているとすれば、それはなぜですか?

4

2 に答える 2

2

個々のビットは、それを含むバイトのアドレスを読み取り、バイトを変更し、必要に応じて書き戻すことによってアクセスされます。

一部のアーキテクチャでは、アドレス指定可能な最小単位はダブル ワードであり、この場合、1 バイトに「そのまま」アクセスすることはできません。理論的には、32 ビットの一意のアドレスで 16 GB のメモリをアドレス指定するアーキテクチャを設計できます。また、ハード ドライブのアドレス指定可能なユニットが 512 バイト セクタの 2^28 ユニット程度に制限されていた数年前にも、同様のことが起こりました。

PC に 32 ビット ポインターがあると言っても過言ではありません。新しいモデルは内部的に 64 ビット システムであり、OS によっては最大 2^48 バイトのメモリにアクセスできるため、これは少し古い情報です。現在、ほとんどの既存の PC は 32 ビットであり、それについては何もできません。

さて、StuartLC はページングについて残っていました。現在の 32 ビット システムでも、古いセグメント レジスタを使用して 48 ビットのアドレス指定を使用できます。(セグメントレジスタの下位3ビットがゼロであるという制限があったかどうか思い出せません...)とにかく、それは個々のアドレスの2 ^ 45バイトを許可し、そのうちのごく一部がメインメモリに同時に存在する可能性があります. そのアドレッシング モードをサポートする OS が開発された場合、おそらく完全な 64 ビットがポインターに割り当てられます。今日の 64 ビット プロセッサと同じように。

于 2012-11-06T15:59:45.127 に答える
0

私の質問は、32 ビット PC がどのようにして 4G メモリにアクセスできるかということです

アドレス バス (アドレス可能なメモリ) とプロセッサ レジスタのサイズを混同している可能性があります。このスーパーユーザーの投稿では、違いについて詳しく説明しています

ページングは​​、OS の機能のサイズを超えてメモリをアドレス指定できるようにするために一般的に使用される手法です。たとえば、PAEを参照してください。

ポインタのサイズは常に 32 ビットですか

いいえ、必ずしもそうではありません。たとえば、16 ビットの DOS や Windows では、ポインターはセグメントに関連している可能性があります。

データをビットに格納することはできませんか?

はい、できます。たとえば、C では、パフォーマンスと移植性が犠牲になりますが、構造体のビット パッキングを行うことができます。

今日、パフォーマンスはより重要であり、コンパイラは通常、パフォーマンス上の理由から、データをそのマシン ワードサイズに合わせようとします。

于 2012-11-06T16:05:01.857 に答える