虚拟地址和物理地址的区别?
问题描述:
请根据以下示例说明虚拟地址与物理地址之间的区别。请解释这里特别使用的地址以及如何在同一地点使用其他地址。 另外,两者如何可以区分。虚拟地址和物理地址的区别?
代码:
if(fork()==0)
{
a=a+5;
printf("%d%d", a, &a);
}
else
{
a=a-5;
printf("%d%d", a, &a);
}
什么地址呢&a
是指在两个陈述?
答
&如果您在其他块中独立声明变量a,则可能引用两个不同的地址。
但是,如果变量a被声明在“if”之上,则在任一情况下,变量“a”将具有相同的物理地址,其可以通过& a来访问。
当您添加或减去“a”中的值时,您正在更改存储在“a”存储器中的内容,表示a的值,而不是地址的值。
在你的情况下,你并没有改变a的地址,因为它是物理地址。
如果你真的想与地址玩,然后有一个指针指向一个像
*p = &a;
p+=5;
p-=5;
这样你就可以去五个内存块向前&向后(一个块大小取决于类型的变量“a “) 在记忆中。
更多关于虚拟地址:refer here
希望有所帮助。
除了评论它是物理地址,我同意这里写的内容。只有内核的最低部分使用物理地址。所有其他代码都适用于虚拟地址。特别是,像Unix这样的系统中的用户程序只能使用虚拟地址,而内核则控制从虚拟地址到物理地址的映射,并且MMU处理映射。基本上没有办法从用户代码中确定对应于虚拟地址的物理地址。 –