【发布时间】:2012-04-12 22:24:31
【问题描述】:
当malloc返回一个指针(一个数据块的虚拟地址)时,
char *p = malloc (10);
p 有一个虚拟地址,(比如 x)。而p 拥有一个由 10 个地址组成的块的虚拟地址。
假设这些虚拟地址是从 y 到 y+10。
这10个地址属于一个页,虚拟-->物理映射放在页表中。
当处理器取消引用指针 p 时,比如 printf("%c", *p); ,处理器如何知道它必须访问 y 处的地址?
是否为了取消引用指针而访问了两次页表,换句话说 - 打印 p 指向的地址?具体是怎么做的,谁能解释一下?
另外,为了访问堆栈变量,处理器是否必须通过页表访问它? 堆栈指针寄存器(SP)不是已经不指向堆栈了吗?
【问题讨论】:
-
你明白 malloc 没有被定义为返回一个“虚拟地址”(即它是特定于实现的)?.
-
假设我们在这种情况下假设它返回虚拟地址?但是,我知道它返回一个指针(堆中内存块的地址)。返回的地址可以是物理的/虚拟的。无论如何,现在我的问题是,如果返回的地址是虚拟的,处理器是否必须第二次访问页表才能访问堆中的数据。
-
错字:这 10 个对象位于
y到y+9。允许指针指向y+10(即在十个对象之后的位置),但不允许取消引用它。
标签: c pointers memory-management