c - 现代 x64 系统上的指针内部是什么?

标签 c windows 64-bit

例如这段代码:

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/

相关文章:

c - 不使用十进制或二进制的十六进制到八进制转换程序

c - 使用 for 循环内定义的变量

c++ - 删除 id3v2 标签 c++

windows - 从通过 Windows 任务计划程序运行的 Perl 脚本生成的进程无权访问 %PATH%

c++ - 无法理解代码/函数调用

c - GCC C vector 扩展 : How to move contents of a vector to the left by one element?

windows - 如何检测 Windows 版本是否合法?

assembly - 测试 256 位 YMM AVX 寄存器是否为零的最有效/惯用方法

c - 如何在 Linux 内核中划分两个 64 位数字?

linux - 符号、ELF 以及如何在内存中链接