-1

私が理解したところでは、ユーザー空間プログラムで扱うアドレスは、実際の物理メモリアドレスではなく、仮想メモリアドレスです。 Memory-Management-Unitはこれらの仮想アドレスを実際の物理アドレスにマップします。ポインタのサイズが仮想メモリ空​​間のアドレス指定可能なサイズより小さいのはなぜですか?

しかし、32ビットマシンでは、ポインタのサイズはほとんど32ビットですが、実際にはプロセスが実際には4GBを超えることがあります。つまり、プログラムの仮想アドレス空間は32ビット以上のアドレス可能です。ビット(8GBの仮想アドレス空間を持つプログラムの場合、仮想メモリは33ビットでアドレス指定されます)。 私のプログラムでは、4GB後にメモリの場所にアクセスするためのポインタ(32ビットのみ)を使用することはできません。

なぜ、ポインタのサイズは32ビットのみですか、32ビットマシンではそれほど多くないのはなぜですか?ポインタのサイズを決めるのは何ですか?

+1

プロセスメモリのアドレス空間が物理メモリ空間より大きくなる可能性があることを説明してください。 – duffymo

+0

@duffymo 4GBのRAMを搭載したPCを想像し、8GBを使用して64ビットアプリケーション(コースの64ビットOS)を実行すると、64GBのアドレス(ポインタ)が使用されますが、RAMは4GBですが、豊富な仮想メモリ – nabuchodonossor

+0

@shiva:これは具体的なプログラミングに関する質問ではないと思います。ここでは例が役立ちますので、あまりにも間違っています – nabuchodonossor

答えて

1

ほとんどの場合、プログラムは仮想メモリ上で実行されます(OSを自分で作成している場合を除きます)。つまり、同時に処理できるメモリ量は、仮想メモリのサイズによって常に制限されます。技術的には、HW(すなわち、これらのアドレスを物理メモリアドレスに実際に変換するMMU)がこれらのサイズを使用するので、アドレスサイズは、基礎となるハードウェアのアドレスバスサイズに結び付けられる。

しかし、32ビットで4 GiBより多くの物理メモリを使用するオプションがあります。 x86では、これはPhysical Address Extensionと呼ばれていました。 PAEでは、コンピュータに4GB以上のメモリが搭載されていますが、32ビットアドレスサイズの制限により、1つのプログラムで同時に4GBのメモリしかアクセスできない場合があります。

関連する問題