次のアドレスで C テキストを読み込んでいます。
https://cs.senecac.on.ca/~lczegel/BTP100/pages/content/compu.html
セクション: Addressible Memoryでは、「アドレス指定可能なプライマリ メモリの最大サイズは、アドレス レジスタのサイズによって異なります。」
それがなぜなのかわかりません。
誰か明確な説明をお願いできますか?
どうもありがとう。
次のアドレスで C テキストを読み込んでいます。
https://cs.senecac.on.ca/~lczegel/BTP100/pages/content/compu.html
セクション: Addressible Memoryでは、「アドレス指定可能なプライマリ メモリの最大サイズは、アドレス レジスタのサイズによって異なります。」
それがなぜなのかわかりません。
誰か明確な説明をお願いできますか?
どうもありがとう。
32 ビット レジスタがある場合、1 つのレジスタに格納できる最大アドレスは 2^32-1 であるため、2^32 ユニットをアドレス指定できます (最近のコンピューターでは、ユニットはほとんどの場合バイトです)。それ以上の数は単に収まりません。
単一のレジスタが保持できるよりも大きなメモリアドレスを使用することでこれを回避できます (一部の CPU/オペレーティングシステムにはそのための機能があります) が、アドレス/ポインタを使用すると複数のレジスタをいじる必要があるため遅くなります。
例として、32 ビットのレジスターと 64 ビットのポインターがあり、ポインターをインクリメントしてchar
( ++p
) の配列内の次の項目を見つけたいとします。単純なインクリメント命令を実行する代わりに、プロセッサは
少し単純化すると、これは分岐 (if-then-else) 命令を実行する必要があることを意味します。これは、最新の CPU が実行する最も遅く、最も複雑な命令の 1 つです。
(たとえば、Intel プロセッサで使用されるマルチレジスタ アドレッシング スキームについては、ウィキペディアのx86 メモリ セグメンテーションを参照してください。)
16 ビットのアドレスを保持する 1 つのアドレス レジスタがある場合、最大 2^16 - 1 のアドレスを持つことができます。
レジスタの数が多くても、それらが指すことができるアドレスの数は幅 (ビット数) によって制限されます。
したがって、アドレス可能な一次メモリの最大サイズは、アドレス レジスタのサイズに依存します。
簡単に言うと、アドレスレジスタはメモリのアドレスを格納および参照するために使用されます。サイズと数が固定されているため、最大アドレスがあります。
明らかに、アドレス可能なものよりも多くのメモリを利用することはできません (マシンはそれを参照する方法を知らないため)。そのため、使用可能なメモリは、実際にはアドレス レジスタで表現できる最大アドレスによって制限されます。