代码之家  ›  专栏  ›  技术社区  ›  Dmitriy Sitnikov

如果C++对象在RAM中,那么通过引用传递它比通过值传递它更好吗?

  •  0
  • Dmitriy Sitnikov  · 技术社区  · 2 年前

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

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

    1 回复  |  直到 2 年前
        1
  •  0
  •   DELTA12    2 年前

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

    此外,以下内容取决于编译器和目标机器,但通常情况下,如果连续多次访问,编译器会将值保留在CPU寄存器中。否则,对象物理上位于哪个级别的内存中,这不是编译器或程序所能控制的。

    推荐文章