【发布时间】:2020-01-28 16:43:46
【问题描述】:
在某些情况下最好通过引用传递参数以避免昂贵的复制,这是一个普遍的事实。但最近我看了一个 Handmade Hero 系列,其中 Casey 说如果对象不是太复杂,有时最好按值传递。我对低级细节不太熟悉,但我认为它与缓存有关。有人可以对发生的事情给出更可靠的解释吗?
【问题讨论】:
标签: pass-by-reference pass-by-value cpu-cache
在某些情况下最好通过引用传递参数以避免昂贵的复制,这是一个普遍的事实。但最近我看了一个 Handmade Hero 系列,其中 Casey 说如果对象不是太复杂,有时最好按值传递。我对低级细节不太熟悉,但我认为它与缓存有关。有人可以对发生的事情给出更可靠的解释吗?
【问题讨论】:
标签: pass-by-reference pass-by-value cpu-cache
如果您按值传递,您很可能通过寄存器传递(假设参数不多且每个参数都不是太大)。这意味着被调用者不需要做任何事情来使用这些值,它们已经在寄存器中。如果通过引用传递,每个值的地址可能在寄存器中,但这需要取消引用,这需要查看 CPU 缓存(如果不是主内存),这会更慢。
在许多流行的系统上,您可以按值传递大约 5-10 个值,每个值与地址一样宽。
【讨论】: