例如这段代码:
int x = 75;
int *p = &x;
printf("%llx\n",p);
写入 64 位数字。我想问的是,这个数字到底是多少?是的,这是一个地址。
但它是存储值 75 的虚拟内存中的绝对地址吗?或者它是否可能偏离某个页面标记,或者偏离程序内存块的“起点”?
如果重要的话,我问的是在典型的 x64 英特尔芯片上的 64 位 Windows 10。
最佳答案
是的,就是你程序的virtual address space中的绝对地址.
这不是偏移量。
在 16 位 Windows(30 年前很常见)中,segmented memory model ,其中指针被分段,由一个16位的段指针和一个16位的偏移量组成(共32位)。
但是,32 位和 64 位 Windows 都使用 flat memory model ,它使用绝对地址。
关于c - 现代 x64 系统上的指针内部是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67730438/