【问题标题】:why passing string_view by value is faster than const reference为什么按值传递 string_view 比 const 引用快
【发布时间】: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


【解决方案1】:

通过引用(以及指针)进行间接访问是有代价的。该成本可能超过复制几个字节的成本。在大多数情况下,您需要通过测量来验证您的用例/目标系统是否正确。请注意,如果函数是内联扩展的,则不太可能有任何差异,因为在任何一种情况下您都可能最终得到相同的程序集。即使没有,差异也可能非常小且难以衡量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 2014-12-10
    • 2020-01-28
    • 1970-01-01
    • 2011-02-04
    • 2018-11-13
    相关资源
    最近更新 更多