我一直听说,对于大于 int
或 long long
的类型,通过引用传递而不是值(复制)更有效,因为它避免了复制。当一个参数按值传递时,该值被推送到函数中完成操作的堆栈上,但我看到的方式是,当您传递引用或指针时,您正在传递变量的地址。如果是这种情况,CPU 是否必须从该地址获取该值,该地址不像堆栈变量那样是本地的,从而导致获取可能不在缓存中的数据?这是否意味着通过引用或指针传递诸如 char
或 short
之类的东西会更慢?我听说它说对于这些类型没有区别,但如果没有,你能解释一下我的推理哪里错了吗?
答案 0 :(得分:6)
首先,在几乎所有情况下,“更快”和“更慢”都无法通过某种推理来确定。它只需要测量不同情况下的时间。
说了以上,让我们开始追逐吧。这里有几个要点:
const T&
和通过 T
,只要它知道它从语义角度来看没有区别答案 1 :(得分:1)
是的,是的。但这不会导致大的性能问题。此外,从内存中获取值比复制它慢。同样对于 int、long long 类型,您不应该对它们使用引用。
答案 2 :(得分:1)
根据 StackOverflow @green-lantern 中的旧帖子说:
<块引用>来源:Pass by value faster than pass by reference
让我们快速浏览一下不同类型的尺寸:
根据经验,如果按值传递的数据量大于指针大小,则按引用或指针传递通常比按值传递快。
在当前情况下,对于 char 和 short 类型,按值传递比按引用传递要快
答案 3 :(得分:-2)
这是一个类比:
Pass by value: Here is the thing.
Pass by reference: You go to this address and you'll find the thing.
哪个更快*?按值传递。
有关系吗?取决于您的用例,请尝试对其进行测量。