【问题标题】:Performance of passing argument as value vs as const reference将参数作为值与作为 const 引用传递的性能
【发布时间】:2016-01-13 11:47:17
【问题描述】:

我是否在现代编译器上通过 const 值或 const 引用传递小对象是否重要?例如,我有几个方法接受但不修改 boost::units::quantity<boost::units::si::length, float>,无论如何都应该优化为浮动。

通常我会将参数的类型声明为 const 引用,但如果我这样做,我担心编译器无法优化模板方式。

编辑: 我没有想到但 rahul.deshmukhpatil 在 cmets 中提到的,如果我接受 const&amp;,编译器必须至少在我的情况下发出双重代码m 从多线程环境中调用。

【问题讨论】:

  • " 但如果我这样做,恐怕编译器无法优化模板方式" 为什么?这些只是确保类型一致性的语法糖。
  • 只是一般的一点,在多线程程序的情况下,如果您传递的对象同时由多个线程共享/作用于多个线程,那么通过值或引用传递可能会产生不同的结果。
  • @πάνταῥεῖ 因为我不确定 float const&amp; 参数是否与 float const 参数一样优化
  • Thantk @rahul.deshmukhpatil 我更新了我的问题
  • "如果我接受 const&,在我从多线程环境调用的情况下,编译器至少必须发出双重代码"嗯?!

标签: c++ performance


【解决方案1】:

如果它是 POD,我希望按值传递它会导致整体性能稍快。我所说的“稍微”是指“只有在某个特定的工作领域中,理智的优先级低于每纳秒的性能,才会关心”。

要了解原因,有必要了解在传统硬件上,如何进行函数调用以及如何传递参数。

除了 POD,唯一的答案是尝试任何一种方式,并收集一些统计数据。

如果你真的不在乎几纳秒的差异,那就做对你来说更方便的事情。

而且,无论哪种情况,模板都是无关紧要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2018-01-20
    • 2011-04-15
    • 2015-10-22
    • 2020-09-14
    • 2018-05-01
    • 1970-01-01
    相关资源
    最近更新 更多