Nav*_*eet 5 c operating-system
例如,当我们写:
int a;
和做&a给我们一些十六进制形式的地址0x12345678,我们称之为虚拟地址。
现在,当我们尝试这样做时
int *temp = 0xfe000000;
,这个地址的行为像虚拟地址还是物理地址?据我所知,虚拟地址是由操作系统给出的,由 MMU 进一步转换为物理地址。
据我所知,分页机制发生在将虚拟地址映射到可用物理地址之间。当我们给一个指针一个地址时会发生什么?该地址是否像虚拟地址一样,然后由 MMU 处理以指向特定的物理地址,或者它本身就像一个物理地址?
int temp;
printf("%x \n", &temp);
int *temp2 = 0xfe000000; //This is just an example address. It could be any address
Run Code Online (Sandbox Code Playgroud)
这个地址 (0xfe000000) 是真实的物理地址还是虚拟地址?
如果您使用操作系统,则这是不可能的,因为操作系统使用虚拟地址,并且您使用的任何内容都将通过虚拟地址映射到物理地址。
但是,如果您正在对微控制器进行编程,则没有虚拟地址,您可以使用 C 语言中的指针访问物理内存位置。