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

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

(精彩的)书中的以下陈述c++模板(第109页)向我建议,通过引用将参数传递给函数可能会迫使处理器再次缓存关联的变量:

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

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

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

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

注意内置的 GCC

__builtin_prefetch

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

但另请参阅这个答案。在许多情况下,您不应该使用

__builtin_prefetch

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