c中的指针是正常变量还是更多

时间:2014-11-15 17:07:03

标签: c++ c

当我写

时,我真的很困惑
int *ptr;

这只是一个正常变量只需保存另一个变量的地址,或者它位于 CPU 寄存器中的复杂事物,以便直接访问< / p>

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

1 个答案:

答案 0 :(得分:0)

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

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

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

虽然直接访问比间接访问更快,但执行时间的差异通常可以忽略不计。例如,如果直接访问需要50纳秒而间接需要60纳秒,则差异将是10纳秒。您的程序需要执行100000或更多的间接操作才能产生明显的时差。有些特殊情况需要进行这种优化;但不是大多数应用程序。等待用户输入或来自硬盘驱动器的I / O浪费的时间使得直接存储器访问和间接存储器访问之间的时间差异无关紧要。

最快&#34;变量&#34;访问按顺序列出:

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

如果您认为间接仍然存在问题,请分析您的代码。为了获得高精度:

  1. 在硬件,LED或某个地方找到测试点(TP) 将示波器探头连接到。
  2. 断言测试点。
  3. 至少执行100,000次迭代。
  4. 取消测试点。
  5. 测量示波器显示的脉冲宽度。
  6. 另一种方法是读取系统时钟,执行1E09次迭代,再次读取时钟。减去两个时钟读数。