按引用或指针传递char或short是否比按值传递慢?

我一直听说它说通过引用传递而不是值(复制)对于大于intlong long避免复制的类型更有效。当一个参数按值传递时,该值被推送到函数中完成操作的堆栈上,但我看到的方式是,当您传递引用或指针时,您正在传递变量的地址。如果是这种情况,CPU 是否必须从该地址获取该值,该地址不像堆栈变量那样是本地的,从而导致获取可能不在缓存中的数据?这是否意味着通过引用或指针传递类似charshort更慢的东西?我听说它说对于这些类型没有区别,但如果没有,

回答

首先,在几乎所有情况下,“更快”和“更慢”都无法通过某种推理来确定。它只需要测量不同情况的时间。

说了以上,让我们进入正题。这里有几个要点:

  • 无论你做什么,编译器都可以自由地改变任何东西,只要它不改变程序的可观察行为。所以从这个角度来看它可能并不重要,因为编译器可以(以两种方式)交换通过const T&和通过,T只要它知道它从语义角度来看没有区别
  • 即使编译器没有更改任何内容,您也可能不会观察到任何影响,因为几乎所有现代处理器都可以很好地使用单级间接(这会导致单个汇编指令)。当然,并非每条指令都同样快,但这让您了解这种变化有多大
  • (我认为)通过引用传递时缓存未命中的可能性稍大,这在理论上会导致更大的性能损失,但我认为当前处理器上的内存预取足够复杂,可以在大多数情况下处理这个问题
  • 即使您的处理器对这些操作有明显的速度差异,它仍然不如算法复杂性重要,这使得这实际上是一个理论问题,而不是一个实际问题

以上是按引用或指针传递char或short是否比按值传递慢?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>