虚拟地址和物理地址的区别?

问题描述:

请根据以下示例说明虚拟地址与物理地址之间的区别。请解释这里特别使用的地址以及如何在同一地点使用其他地址。 另外,两者如何可以区分。虚拟地址和物理地址的区别?

代码:

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

希望有所帮助。

+0

除了评论它是物理地址,我同意这里写的内容。只有内核的最低部分使用物理地址。所有其他代码都适用于虚拟地址。特别是,像Unix这样的系统中的用户程序只能使用虚拟地址,而内核则控制从虚拟地址到物理地址的映射,并且MMU处理映射。基本上没有办法从用户代码中确定对应于虚拟地址的物理地址。 –