【问题标题】:How is a pointer distinguished from a normal variable in C , under the hood如何区分指针与 C 中的普通变量,在引擎盖下
【发布时间】:2012-04-13 04:00:09
【问题描述】:

持有虚拟地址的指针指向的数据是如何被访问的?

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

谁能给我一个逐步的过程?

【问题讨论】:

    标签: pointers memory-management virtual-memory dereference


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您是在询问关于整本书都写了哪些问题,但要点如下:

      1. 通过取消引用指针。指针在内存中的一个地址,所以指针准确地描述了在哪里检索它所指向的数据。
      2. 因为代码告诉编译器(通过*)一个变量持有一个指针。编译器将这些信息转换成代码,告诉处理器该做什么。处理器“知道指针的内容是地址而不是数据本身”;它只是按照机器代码的指示行事。
      3. 一步一步的过程是什么?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        相关资源
        最近更新 更多