次のコードを使用して、ポインターのアドレスを出力できます
#include<stdio.
int main(){
int *q =(int*) malloc(4);
printf("%x\n",q);
}
次のコードを実行すると、16 進数値が出力されます。ヒープ上の変数 q の仮想アドレスですか、それとも物理アドレスですか? 仮想の場合、他をどのように印刷すればよいですか?
それは仮想アドレス空間の観点からです。標準Cで「物理」アドレスを取得することは不可能です(もちろん、仮想メモリを持たないシステムを使用している場合を除きます。その場合、常に物理アドレスになります)-現在スワップスペースにある場合、たとえば、ディスク上の現在の場所以外には、あまり役に立たない場所さえない場合があります。
それが仮想アドレスか物理アドレスかをプログラムが知る方法はありません。メモリは、オペレーティング システムとプログラムにアドレスを渡す MMU によって処理されます。