【发布时间】:2021-01-20 15:23:15
【问题描述】:
我检查了this question,大多数答案说我应该按值传递它,尽管它显然传递了更多数据(因为在 32 位系统中按值传递 8 个字节,而通过引用仅传递 4 个字节 sizeof(string_view) > sizeof (string_view*)) 这在 C++20/17 中仍然有用吗?有人能解释一下为什么吗?
【问题讨论】:
-
只有 4 个字节的引用 -- 你从哪里得到这些信息?
-
我认为 refrence 通常会有开销。这就是为什么你不通过 ref 传递整数,对吧?
-
@0xDEADC0DE 在内部通过引用传递被实现为通过指针传递。所以在函数中你总是需要取消引用指针。
-
引用可能会产生额外的开销,并且通常(但不一定!)被实现为传递指针。在一个性能实验中,参考将我们的性能降低了一个数量级,但这对于参考来说是病态的。我们的参数截止值是 256 字节或更少的参数,性能效率更高,512 字节或更大作为参考更好。 256-512 有点灰色地带。那是针对特定平台的,其他平台肯定会有不同的行为特征。 (
-O3和个人资料,个人资料,个人资料。) -
对于我们的应用程序,它位于两个不同但非常相似的 64 位平台上。我们正在将我们的应用程序移植到另外两个不同架构的 64 位平台上,这将使我们之前的测试无效,我们将不得不从头再来。变化是唯一不变的。软件工程永远不必说你完成了。
标签: c++ parameter-passing pass-by-reference pass-by-value