当 malloc 返回一个指针(一个数据块的虚拟地址)时,
char *p = malloc (10);
p 有一个虚拟地址,(比如 x)。并p
持有一个由 10 个地址组成的块的虚拟地址。假设这些虚拟地址是从 y 到 y+10。
这10个地址属于一个页,虚拟-->物理映射放在页表中。
例如,当处理器取消引用指针 p 时,printf("%c", *p);
处理器如何知道它必须访问 处的地址y
?
是否为了取消引用指针而访问了两次页表,换句话说 - 打印指向的地址p
?具体是怎么做的,谁能解释一下?
另外,为了访问堆栈变量,处理器是否必须通过页表访问它?堆栈指针寄存器(SP)不是已经不指向堆栈了吗?