例如,当我们写:
int a;
而做&a
会给我们一些十六进制形式的地址0x12345678
,我们称其为虚拟地址。
现在,当我们尝试做
int *temp = 0xfe000000;
该地址的作用类似于虚拟地址还是物理地址?据我所知,虚拟地址是由OS提供的,然后由MMU进一步转换为物理地址。
int temp;
printf("%x \n", &temp);
int *temp2 = 0xfe000000; //This is just an example address. It could be any address
这个地址(0xfe000000)的作用类似于真实的物理地址还是虚拟的地址?
答案 0 :(得分:0)
如果您使用的是操作系统,则不可能,因为操作系统正在使用虚拟地址,并且您使用的任何内容都将通过虚拟地址映射到物理地址。
但是,如果您正在对微控制器进行编程,则没有虚拟地址,并且可以使用C中的指针访问物理内存位置。
答案 1 :(得分:0)
我们通常获得的地址,例如PC中C语言编程的指针是虚拟地址。虚拟到物理的映射以及相反的方式,是由操作系统在内部处理的。通常,用户(root或其他用户)在地址映射中没有发言权。
另一方面,简单的微控制器通常没有TLB映射,因此您访问的地址就是设备的实际物理地址,如其他答案所述。
此外,如果您打算从头开始使用微处理器,则始终可以拥有自己的物理地址到虚拟地址的映射,甚至可以在其中设置地址块的属性。