この回答のためにPCを仮定すると、それはCPU以上のプラットフォームに依存するためです。
単純にその近くでは動作しません。しかし、最初に、
これはX + 1ビットを使用し、いくつかの無効なアドレスを持っていますか?
これは常にすべてのビットを使用しますが、CPUは無効なアドレスも気にしません。使用することができます。それは知らないので、気にすることはできません。
Who は、BIOSが知っていることを知っており、BIOS割り込みを使用してリニアアドレス空間のランドスケープがどのようになっているかを伝えます(おそらくOSです)。 "低メモリ"だけを検出する古いものはかなりシンプルで、メモリがどれくらいあるかを伝え、それをあなたに任せます(風景はそれほど複雑ではないので十分です)。 INT 0x15、EAX = 0xE820の「新しい」アドレスは、実際のマップを提供します。実際のマップは、リニアアドレス空間の範囲のリストと記述の形をしています。
実際のRAMはすべて、0から始まるきれいな連続した範囲にマップされています。チャンクにマップされ、たとえばメモリマップされたデバイスがマップされている穴で区切られます。
"低アドレス"(相対的に "低"ですが)に穴があるため、実際のRAMのいくつかは "上に"プッシュできます。したがって、RAMが4GBの場合、その一部は0xFFFFFFFFを超えるアドレスにマップされます。実際に穴がどこに依存しているか。メモリマップを読みます。
例として、マップは次のようになります。
最初の列は開始アドレスで、2番目の列はサイズで、最後の列がタイプです。タイプ1は通常のRAMであり、タイプ2はRAMではありません。タイプ3は読み込みたいものがありますが、それを済ませた後に使用することができます。さらに2つのタイプがあります。このマップは、VirtualBoxで4GBのRAMを使用して作成されました。しかしそれは正確にそれに追加されません。ポイントは、あなたは穴を見ることができます。
RAMが少ない場合、2番目のタイプ1の範囲は短くなりますが、残りの部分は同じように見えます(とにかく、どこか別の場所で表示されることが多い) - 32ビット境界付近のタイプ2の範囲そこにはまだ存在し、ただの束の下に直接マップされた "何もない"ものがあります。
したがって、アドレスにいくつかのビット数を使用するほど簡単ではありません。
OSが16ビットの場合、EMMの「拡張メモリマネージャ」を使用して16ビットを超えるアドレッシングが可能になりました。その後、OSが32ビットの場合、4GBのメモリを扱うことができ、4GB以外のメモリはまったく使用されませんでした。ただし、Win32では3GBしか使用しませんでした。 64ビットでは最大メモリは実際にはテラバイトです。メモリがアドレス指定可能なメモリより大きいときはいつでも、CPUはアドレス可能なサイズを超えるメモリに到達する方法がありません。 – alvits
CPUはハードウェアのビット幅でバインドされ、OSはソフトウェアのビット幅でバインドされます。 – alvits