可执行程序中的程序计数器与主存储器中的程序计数器之间的区别

Difference between program counter in the executable and program counter in the main memory

可执行文件中的程序计数器和主存中的程序计数器有什么区别?

我的教授举了一个关于可执行文件中的程序计数器及其十进制值的示例,他写道,每条指令 PC 递增 4。

像这样:

  • 0000
  • 0004
  • 0008
  • 那么主存中的程序计数器呢?它们的十进制值是什么样的?它们与上面的值相同吗?

    谢谢!

    没有 "program counter in main memory" 这样的东西。您可能指的是物理和虚拟内存寻址。

    当您编写和编译程序时,就好像您拥有整个内存 space 一样。您不关心在同一系统上运行的其他程序,也不用担心写入其他程序的内存 space 或其他程序写入您的内存 space。怎么样?

    这叫做virtual memory。每个程序都有自己的 虚拟 内存 space。程序中的所有地址,无论是指令地址(如程序计数器)还是数据地址,都在这个虚拟内存中 space。另一方面,您的系统有一个实际的 物理 内存 space,所有程序都将驻留在其中。这些 space 之间的转换由操作系统完成(也许还有处理器本身的一些支持,具体取决于体系结构。x86 处理器使用称为 TLB 的结构来支持虚拟地址到物理地址的转换)。

    您的程序有一个程序计数器,它位于程序的虚拟地址 space 中,但在主内存中它是使用物理地址 space 寻址的。