gpt4 book ai didi

c++ - c中的指针是普通变量还是比这个多

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:43 25 4
gpt4 key购买 nike

我写的时候很迷茫

int *ptr;

这只是一个普通变量只是保存另一个变量的地址还是位于CPU寄存器中用于直接访问的复杂变量

我需要一个明确的答案指针是不是变量?

最佳答案

指针是一个变量,因为它可以更改为指向相同数据类型的其他实例。

在大多数处理器中,它表示为处理器完整地址范围内的地址。

编译器生成的代码可能会发出代码将指针变量的值加载到寄存器中,然后发出代码对寄存器进行操作。一种操作是取消引用指针。换句话说,编译器发出代码以将指针所代表的地址处的值加载到寄存器中。这也称为间接。

虽然直接访问比间接访问快,但执行时间的差异通常可以忽略不计。例如,如果直接访问需要 50 纳秒,而间接访问需要 60 纳秒,则差异为 10 纳秒。您的程序需要执行 100000 次或更多次间接寻址才能产生明显的时间差异。在某些特殊情况下,这种优化是必要的;但不适用于大多数应用程序。等待用户输入或来自硬盘驱动器的 I/O 所浪费的时间使得直接内存访问和间接内存访问之间的时间差异变得微不足道。

最快的“变量”访问按顺序列出:

  • 处理器寄存器
  • 直接从数据缓存中获取。
  • 直接从芯片内存中获取,但在 CPU 内核之外。
  • 从芯片内存间接获取,但在 CPU 内核之外。
  • 直接从片上系统的内存中获取数据。
  • 从片上系统的内存中间接获取数据。
  • 从 I/O 端口获取数据。

如果您认为间接寻址仍然令人担忧,请分析您的代码。对于高精度:

  1. 在硬件、LED 或其他您可以找到的地方找到一个测试点 (TP)将示波器探头连接到。
  2. 断言测试点。
  3. 至少执行 100,000 次迭代操作。
  4. 解除断言测试点。
  5. 测量示波器显示的脉冲宽度。

另一种方法是读取系统时钟,进行1E09次迭代,再次读取时钟。减去两个时钟读数。

关于c++ - c中的指针是普通变量还是比这个多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26948369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com