繁体   English   中英

当 function 返回时,我如何记录通过引用传递给 function 的变量是否需要再次缓存?

[英]How can I document if variables passed by reference to a function need to be cached again when the function returns?

(精彩的)书c++ 模板(第 109 页)中的以下语句向我表明,将 arguments 传递给 function 可能会再次通过引用强制处理器缓存关联的变量:

在底层,通过引用传递参数是通过传递参数的地址来实现的。 地址被紧凑地编码,因此将地址从调用者传输到被调用者本身是有效的。 然而,在编译调用者的代码时,传递一个地址会给编译器带来不确定性:被调用者对该地址做了什么? 理论上,被调用者可以更改通过该地址“可达”的所有值。 这意味着,编译器必须假设它可能缓存的所有值(通常在机器寄存器中)在调用之后都是无效的。 重新加载所有这些值可能非常昂贵。

围绕引用的讨论提到 const-reference 也可能在 function 调用返回后再次被缓存。 读完这句话后,我想到了以下两个问题:

  • 是否可以在 function 调用后再次缓存变量时验证(可能使用工具)? 我知道可以分析程序的平均缓存性能,但我想知道是否可以将缓存性能与特定的 function 行关联起来?
  • 有人可以构建一个示例来记录使用引用参数调用 function 会使处理器的缓存无效吗?

通常,您不能编写与CPU 缓存相关的可移植 C++ 代码。 一些微控制器没有任何缓存。 一些高端处理器有几个级别。

注意GCC内置__builtin_prefetch

我相信其他一些编译器也有类似的东西

但另见这个答案 在许多情况下,您不应该使用__builtin_prefetch

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM