C++ CPPCore指南:什么是热整型拷贝?

C++ CPPCore指南:什么是热整型拷贝?,c++,cpp-core-guidelines,C++,Cpp Core Guidelines,我一直在阅读参数传递表中的以下句子,但我不理解: “便宜”≈ 少量热整型拷贝 “中等成本”≈ memcpy热/连续~1KB且无分配 “hot int copy”是什么意思?在本例中,“hot”可能指被缓存的可能性。如果某个特定的内存块可能不在缓存中,则该内存块是“冷的”,因为最近在该执行线程中没有被触及。相反,如果一段内存可能最近被触摸过,或者与最近被触摸过的内存相邻,则它是“热的” 因此,它是指对当前缓存中的内容进行内存复制的成本,因此就实际内存带宽而言,成本较低 例如,考虑返回数组< /代码

我一直在阅读参数传递表中的以下句子,但我不理解:

“便宜”≈ 少量热整型拷贝
“中等成本”≈ memcpy热/连续~1KB且无分配

“hot int copy”是什么意思?

在本例中,“hot”可能指被缓存的可能性。如果某个特定的内存块可能不在缓存中,则该内存块是“冷的”,因为最近在该执行线程中没有被触及。相反,如果一段内存可能最近被触摸过,或者与最近被触摸过的内存相邻,则它是“热的”

因此,它是指对当前缓存中的内容进行内存复制的成本,因此就实际内存带宽而言,成本较低

例如,考虑返回<代码>数组< /代码>的函数。如果该数组中的值是由函数本身生成的,那么这些整数是“热的”,因为它们几乎肯定仍在缓存中。因此,按值返回它被认为是正常的

但是,如果存在包含此类类型的数据结构,则此函数可以简单地检索指向该对象的指针。按值返回它意味着执行几个未缓存的内存访问,因为必须复制到返回值。从内存缓存的角度来看,这并不理想,因此返回指向数组的指针可能更合适


显然,无论哪种方式都会发生未缓存的访问,但在后一种情况下,调用方将决定执行哪些访问,哪些不执行。

我真的看不出缓存与是否通过引用或值传递有什么关系,不过。。。无论哪种方式都需要读取内容,因此热/冷缓存成本都会发生,而且如果您添加副本,那么无论哪种方式都会增加相同的时间。。。我很笨吗?如果函数可能不读取对象,而不是总是复制对象,那么我猜by ref(也)会更快。(编辑是信息性的wrt返回值,但不是按要求传递参数。)@下划线_d:“编辑是信息性的wrt返回值,但不是按要求传递参数”核心指南部分讨论输入和输出“参数”。所以这两方面都考虑到了。