以下のリンクでは、Sdaz MacSkibbons氏の回答が仮想アドレスシステム上のプロセスアドレス空間の概要を示しています。仮想アドレスシステム上のアドレス空間の処理
What happens when a computer program runs?
今、すべてのプロセスが、4ギガバイトの仮想アドレス空間を取得したとします。これは、この仮想アドレス空間の先頭アドレスがスタック部分(スタックアドレスは0から始まるものとします)を取得し、下からのアドレス空間がテキスト、データ、グローバルおよびヒープに割り当てられることを意味します。ヒープのサイズが変わるので、新しいmalloc割り当ては仮想アドレス空間ページを実メモリに直接マップするか、またはヒープに割り当てる以前に割り当てられた仮想アドレスページが空き/使用可能かどうかをチェックします。そして、プロセスがそれをどのようにサポートするのかよりも、4GBを超えるような大量のヒープメモリが必要な場合はどうでしょうか?
ありがとうございます。
OSによって異なります。 %pのprintfを使用してCプログラムを作成し、ローカル変数(stacK)、割り当てられた(malloc())変数、静的変数のアドレス(プログラムデータ)、関数のアドレス(関数へのポインタ) ...。仮想アドレス空間の一部は、OSに使用されます。実行中の各スレッドに関連するデータ(rand()のシード値など)もあります(FSまたはGSセグメントレジスタはこれにアクセスするために使用されるか、仮想アドレス空間にマップされる可能性があります)。 – rcgldr