代码之家  ›  专栏  ›  技术社区  ›  CaptainCodeman

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

  •  1
  • CaptainCodeman  · 技术社区  · 3 年前

    此代码例如:

    int x = 75;
    int *p = &x;
    
    printf("%llx\n",p);
    

    但它是虚拟内存中存储值75的绝对地址吗?或者它可能是从某个页标记偏移,或者是从程序内存块的“起点”偏移?

    如果有关系的话,我要问的是Windows10,64位,一个典型的x64英特尔芯片。

    2 回复  |  直到 3 年前
        1
  •  4
  •   Andreas Wenzel    3 年前

    是的,它是你程序的绝对地址 virtual address space .

    它不是偏移量。

    segmented memory model

    flat memory model ,它使用绝对地址。

        2
  •  1
  •   mkayaalp    3 年前

    它是一个虚拟地址,它是一个虚拟页码和从页面开始的偏移量。转换机制在进程的页表中查找,以确定相应的物理页号,并将其与偏移量相结合,得出物理地址。