You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中基本类型按值传递比引用传递慢的原因咨询

基本类型传值与传引用的性能差异疑问

我了解到不少观点认为int这类基本类型按值传递比按引用传递更快,但编写的测试代码却出现相反结果:

按值传递的代码(平均耗时约2秒)

#include <iostream>
#include <chrono>

using namespace std;
using namespace chrono;

int func(unsigned long long x) {
  ++x;
  return x;
}

int main()
{
  for (int b = 0; b < 5; b++) {
    
    unsigned long long x = 0;
  
    auto start = high_resolution_clock::now();
    for (long long j = 0; j < 500000; j++) {
      for (long long i = 0; i < 180000000; i++) {
        x = func(x);
      }
    }
  
    auto stop = high_resolution_clock::now();
    auto elapsed = std::chrono::high_resolution_clock::now() - start;
  
    long long microseconds = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
    cout << x <<" iterations took " << microseconds << " microseconds\n";
  }
}

按引用传递的代码(平均耗时不足1微秒)

#include <iostream>
#include <chrono>

using namespace std;
using namespace chrono;

void func(unsigned long long& x) {
  ++x;
}

int main()
{
  for (int b = 0; b < 5; b++) {
    
    unsigned long long x = 0;
  
    auto start = high_resolution_clock::now();
    for (long long j = 0; j < 500000; j++) {
      for (long long i = 0; i < 180000000; i++) {
        func(x);
      }
    }
  
    auto stop = high_resolution_clock::now();
    auto elapsed = std::chrono::high_resolution_clock::now() - start;
  
    long long microseconds = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count();
    cout << x <<" Took " << microseconds << " microseconds\n";
  }
}

性能差异的核心原因

这种反常结果完全是编译器优化导致的,和传值/传引用本身的性能特性无关:

  • 引用版本被完全优化:编译器能轻易识别出,整个嵌套循环的唯一作用就是把x从0累加至500000 * 180000000。它会直接计算这个最终值,跳过所有循环执行,所以程序运行耗时几乎为0。

  • 传值版本的优化受限:虽然传值版本的逻辑结果和引用版本一致,但x = func(x)的流程(传值副本→自增→返回赋值)让编译器的优化分析更复杂,没能完全消除循环。实际运行时它可能还是执行了部分循环逻辑,或者优化力度不如引用版本,导致耗时更长。

  • 测试场景不真实:这种极端的无副作用循环测试完全是编译器的“跑分陷阱”。在真实业务场景中,基本类型传值的开销通常比传引用小——因为引用本质是隐藏的指针,传递指针需要间接访问内存;而传值是直接把数据放到寄存器中操作,延迟更低、速度更快。

内容的提问来源于stack exchange,提问作者Joeger-Bahar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:50