【发布时间】:2012-04-13 04:00:09
【问题描述】:
持有虚拟地址的指针指向的数据是如何被访问的?
处理器如何知道指针的内容是地址而不是数据本身?
谁能给我一个逐步的过程?
【问题讨论】:
标签: pointers memory-management virtual-memory dereference
持有虚拟地址的指针指向的数据是如何被访问的?
处理器如何知道指针的内容是地址而不是数据本身?
谁能给我一个逐步的过程?
【问题讨论】:
标签: pointers memory-management virtual-memory dereference
简而言之,处理指针的C 代码被编译为处理地址的 CPU 操作代码——因此,数字——对一个值执行操作的物理机器代码,只是一个不同的指令代码。对地址(指针)执行操作。
当然,现实比这更复杂。您可以按照此堆栈溢出问题中的说明详细了解不同(小)C 程序会发生什么
How do you get assembler output from C/C++ source in gcc?
在更深层次上,操作系统和 CPU 虚拟化物理内存——因此,在硬件中请求地址 x 的内存的指令使用虚拟查找表从物理地址 y 获取内存——这是一种现代开发,允许用于安全和内存管理功能,例如内存随机化。
【讨论】:
您是在询问关于整本书都写了哪些问题,但要点如下:
*)一个变量持有一个指针。编译器将这些信息转换成代码,告诉处理器该做什么。处理器“知道指针的内容是地址而不是数据本身”;它只是按照机器代码的指示行事。【讨论】: