mallocがポインタ(データブロックの仮想アドレス)を返す場合、
char *p = malloc (10);
pには仮想アドレスがあります(たとえばx)。そしてp
、10個のアドレスのブロックの仮想アドレスを保持します。これらの仮想アドレスがyからy+10であるとします。
これらの10個のアドレスはページに属し、仮想->物理マッピングはページテーブルに配置されます。
プロセッサがポインタpを逆参照するとき、たとえばprintf("%c", *p);
、プロセッサはどのようにしてアドレスにアクセスする必要があることを認識しますy
か?
ポインタを逆参照するために、ページテーブルに2回アクセスしますか?つまり、?が指すアドレスを出力しp
ますか?それはどのくらい正確に行われていますか、誰かが説明できますか?
また、スタック変数にアクセスするために、プロセッサはページテーブルを介してスタック変数にアクセスする必要がありますか?スタックポインタレジスタ(SP)は、スタックをまだ指していませんか?