自从我在OS类中听到虚拟和物理内存概念的概念之后,这是一个非常基本的问题令人难以置信.现在我知道在加载时和编译时,虚拟地址和逻辑地址绑定方案是相同的,但在执行时它们是不同的.
首先,为什么在编译和加载时生成虚拟地址以及当我们应用&号运算符来获取变量,naive数据类型,用户定义类型和函数定义地址的地址时返回什么是有益的?
当OS这样做时,OS如何从虚拟地址到物理地址完全映射?这些问题都是出于好奇心而且我会喜欢考虑现代操作系统的一些好的和深刻的见解,"早期操作系统是怎么回事".我只是特定于C/C++,因为我对其他语言知之甚少.
我刚刚开始C.我已阅读各种书籍/教程中的指针,我理解基础知识.但有一点我没有看到解释的是数字是多少.
例如:
int main(){
int anumber = 10;
int *apointer;
apointer = &anumber;
printf("%i", &apointer);
}
Run Code Online (Sandbox Code Playgroud)
可能会返回一个像4231168这样的数字.这个数字代表什么?它是RAM中的一些存储名称吗?
我可以使用以下代码打印指针的地址
#include<stdio.
int main(){
int *q =(int*) malloc(4);
printf("%x\n",q);
}
Run Code Online (Sandbox Code Playgroud)
当我执行以下代码时,将打印十六进制值.它是堆上变量q的虚拟地址还是物理地址?如果它是虚拟的,我应该如何打印另一个?