为什么按值传递有时比按引用传递更好

Why passing by value is sometimes better than passing by reference

提问人:Joseph Kirtman 提问时间:9/29/2019 更新时间:11/6/2019 访问量:79

问:

一个常见的事实是,在某些情况下,最好通过引用传递参数,以避免昂贵的复制。但最近我看了一部《手工英雄》系列,凯西说,如果对象不是太复杂,有时最好按值传递。我不太熟悉低级细节,但我认为它与缓存有关。有人可以对正在发生的事情给出更可靠的解释吗?

按引用传递 值传递 CPU-缓存

评论

0赞 Seth 8/13/2022
嘿,我很好奇他在哪一集提到过这个。这里有一个 Casey 反其道而行之的例子,从按值传递结构到按引用传递,在这里他提到他首先以另一种方式传递的唯一原因是因为他意识到有时其他人会这样做: hero.handmade.network/episode/code/day006/#3370 也许他指的是你看过的东西?在这种情况下,听起来通常默认为通过引用传递结构。

答:

0赞 John Zwinck 11/6/2019 #1

如果按值传递,则很可能是通过寄存器传递(假设参数不多,每个参数都不太大)。这意味着被调用者无需执行任何操作即可使用这些值,它们已经在寄存器中。如果通过引用传递,则每个值的地址可能在寄存器中,但这需要取消引用,这需要在 CPU 缓存(如果不是主内存)中查找,这速度较慢。

在许多流行的系统上,您可以传递大约 5-10 个值,每个值的宽度与一个地址一样宽。