如果 C++ 对象位于 RAM 中,通过引用传递比通过值传递更好吗?

问题描述 投票:0回答:1

人们普遍认为,在 C++ 语言中,通过引用将对象传递给函数比通过值传递对象更好(因此据说可以减少副本数量)。但是,如果该对象位于 RAM 中(而不是处理器的缓存中)并且函数本身多次访问该对象的字段,该怎么办?众所周知,访问 RAM 的成本很高(200-600 个周期),但一次复制 64-128 个字节。按值传递一个小对象(最多 128 字节),允许处理器一次将其复制到缓存中,然后使用高速缓存访问其字段,不是更有效吗?

或者在这种情况下编译器可能会独立执行隐式复制到缓存?

c++ memory parameter-passing pass-by-reference ram
1个回答
0
投票

无论物理内存位置如何,按值传递大对象通常会强制通过堆栈传递它,这意味着需要先将其复制到那里,这需要时间。无论哪种方式都需要访问该对象。通过引用传递可以节省此复制步骤。

此外,以下内容取决于编译器和目标机器,但一般来说,如果连续多次访问,编译器会将值保留在CPU寄存器中。否则,该对象物理上位于哪一级内存就不是编译器或程序可以控制的了。

© www.soinside.com 2019 - 2024. All rights reserved.