0

保存虚拟地址的指针如何指向数据?

处理器如何知道指针的内容是地址而不是数据本身?

有人可以给我一个逐步的过程吗?

4

2 回答 2

3

简而言之,C处理指针的代码被编译为处理地址的 CPU 操作代码——因此,数字——对值执行操作的物理机器代码,只是与对地址执行操作的指令代码不同的指令代码(指针)。

现实当然比这更复杂。您可以C按照此堆栈溢出问题中的说明详细了解不同(小)程序 会发生什么情况How do you get assembler output from C/C++ source in gcc?

在更深的层次上,操作系统和 CPU 虚拟化物理内存——因此,在硬件中请求地址 x 的内存的指令使用虚拟查找表从物理地址 y 获取内存——这是一种现代开发,它允许安全性和内存管理功能,例如内存随机化。

于 2012-04-13T04:08:44.293 回答
1

您是在询问有关已编写整本书的问题,但要点如下:

  1. 通过取消引用指针。指针内存中的地址,因此指针准确地描述了检索它指向的数据的位置。
  2. 因为代码告诉编译器(通过*)一个变量持有一个指针。编译器将这些信息转换成代码,告诉处理器该做什么。处理器“不知道指针的内容是地址而不是数据本身”;它只是按照机器代码的指示进行。
  3. 一步一步的过程是什么?
于 2012-04-13T04:05:46.850 回答