此代码例如:
int x = 75;
int *p = &x;
printf("%llxn",p);
写入64位数字。我想问的是,这个数字到底是多少?是的,这是一个地址。
但是它是存储值75的虚拟存储器中的绝对地址吗?或者它可能是从某个页面标记偏移的;起点";程序的内存块?
如果重要的话,我问的是Windows 10,64位,在一个典型的x64英特尔芯片上。
是的,它是程序虚拟地址空间中的绝对地址。
这不是偏移。
在16位Windows(30年前很常见(中,使用了分段内存模型,其中指针是分段的,由16位分段指针和16位偏移量(总共32位(组成。
但是,32位和64位Windows都使用平面内存模型,该模型使用绝对地址。
它是一个虚拟地址,是一个虚页码,也是从页面开始的偏移量。翻译机制在进程的页表中查找以确定相应的物理页码,并将其与偏移量组合以得出物理地址。