[英]How can I write a function template that returns either a reference or a value?
[英]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 调用返回后再次被缓存。 读完这句话后,我想到了以下两个问题:
通常,您不能编写与CPU 缓存相关的可移植 C++ 代码。 一些微控制器没有任何缓存。 一些高端处理器有几个级别。
注意GCC内置__builtin_prefetch
。
我相信其他一些编译器也有类似的东西
但另见这个答案。 在许多情况下,您不应该使用__builtin_prefetch
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.