C++中传递const long double类型参数时使用引用是否合适?
long double 传 const 引用和传值的效率差异分析
你给出的代码片段如下:
typedef long double Real; void func(const Real& x, const Real &y);
这个问题没有绝对的标准答案,要结合运行平台、调用约定和编译优化情况判断:
- 常规x86_64平台下,80位
long double通常按128位对齐存储,大小确实比64位指针(8字节)大,但这不代表传引用一定效率更高:主流x86_64调用约定中,浮点参数会通过XMM或x87寄存器传递,引用作为指针走通用寄存器传递。当参数数量少、能全部通过寄存器传递时,传值的开销反而更低:传引用拿到地址后需要多一次内存解引用才能读取值,传值可以直接使用寄存器中的数据,没有额外访存开销。 - 只有当参数数量超过寄存器传递阈值、需要通过栈传递参数时,传递128位
long double的开销才会高于传8字节指针,这时候传引用才有明显的效率优势。 - 如果开启了链接时优化(LTO)或者函数被内联,两种写法的差异会被编译器完全抹平,不会产生性能区别。
实际使用建议
这类底层参数传递的性能差异非常微小,绝大多数业务场景下完全感知不到,不需要为此过度纠结。如果是性能敏感的热点函数,可以基于实际压测结果选择传递方式,优先遵循团队统一编码规范即可,可读性的优先级远高于这种可忽略的性能差异。
内容的提问来源于stack exchange,提问作者Jimmy Chen
相关产品推荐
相关产品推荐

