変数のアドレスを出力すると、どのアドレスが出力されるでしょうか?
それが仮想メモリの場合、なぜそうなのですか?
誰かもっと説明してくれませんか...
変数のアドレスを出力すると、どのアドレスが出力されるでしょうか?
それが仮想メモリの場合、なぜそうなのですか?
誰かもっと説明してくれませんか...
最新のデスクトップ/サーバー OS では、すべてのメモリが仮想メモリです。カーネルの外部から基礎となる物理アドレスにアクセスする方法を知りません。たとえそれが可能であったとしても、ほとんどの状況では役に立ちません。
したがって、実行printf("%p", (void*)&variable);
すると、現在のプロセスの変数の仮想アドレスが出力されます。
仮想メモリアドレスが出力されます。これは、物理アドレスが必要ないためです。OSの全体的なポイントは、物理アドレスを処理する必要がないようにすることです(それだけではありませんが、それもそれです:D)。
通常の PC コンピューターでは、ポインターを同じサイズの整数に変換した場合に得られる値です。
void *p = something;
int i = *(int*)p;
printf("%x", i);
もちろん、メモリアドレスは仮想です。これは、コードを実行するプロセスがコンピューターのメモリをアドレス指定する方法だからです。プロセスは物理メモリを認識できません。