用段地址*16+偏移地址得出物理地址后,那个物理地址就是数据在内存中的位置吗
看王爽的汇编语言的时候,有个疑惑。就是用段地址*16+偏移地址得出物理地址后,那个物理地址就是数据在内存中的位置吗?我看都是20位的物理地址,因为有20位地址总线,比如10000H。但我用
#include <iostream>
using namespace std;
int main()
{
int p = 1;
cout << &p << endl;
return 0;
}
输出1所在的位置时,结果为0X22ff44,和上面物理地址的形式差别很大呀,不解中。。。我原本以为也是5位16进制数的。为什么呢
intel cpu编程时 有3类地址概念
虚拟地址:例如汇编中的cs:0000之类的,在16为系统是20位地址,应用程序和内核都可以使用
物理地址:内存的实际地址(可能表达不准确),就是硬件连接ram时,ram的地址有可能是ram的选择线与cpu的地址线30连接,那么ram的地址就从0x40000000
线性地址:就是把地址从0~ram大小表示,应用程序和内核使用起来方便
虚拟地址和线性地址,应用程序用哪种,是由os确定的。确定的是linux让应用程序使用线性地址,windows不确定
理解是错误的,不是物理地址 王爽那本书讲的是16位的cpu,地址线16根,而现在的cpu大多32根地址线,也就是4G的寻址范围。