CppCoreGuidelines:什么是热整数副本?

CppCoreGuidelines: What are hot int copies?

我一直在阅读CppCoreGuidelines F.15,但我不理解参数传递table中的以下句子:

"Cheap" ≈ a handful of hot int copies
"Moderate cost" ≈ memcpy hot/contiguous ~1KB and no allocation

“hot int copy”是什么意思?

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

所以它谈论的是对当前缓存中的内容进行内存复制的成本,因此就实际内存带宽而言很便宜。

例如,考虑一个 return 是 array<int, 50> 的函数。如果该数组中的值是由函数本身生成的,那么这些整数就是“热”的,因为它们几乎肯定仍在缓存中。所以 return 按值计算它是可以的。

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

显然,未缓存的访问会以任何一种方式发生,但在后一种情况下,调用者可以决定执行哪些访问以及不执行哪些访问。