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

引用与指针的性能及内存开销对比咨询

引用与指针实现swap的性能及内存开销对比

首先得明确:你贴的指针版swap代码是无效的——它只交换了函数内部两个指针变量的指向,完全没改动main里x和y的实际值。正确的指针版swap应该操作指针指向的内存内容,写法如下:

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

接下来基于正确实现的两个版本分析:

内存开销

  • 引用版:C++里引用是变量的别名,底层通常由编译器用指针实现,但语法上不需要显式存储指针。函数调用时,引用参数的传递本质是传地址,栈上开销就是一个指针的大小(32位系统4字节,64位8字节)。临时变量temp是int类型,和指针版的临时变量内存占用完全一致。
  • 指针版:指针本身是存储地址的变量,函数参数a和b各占一个指针大小的栈空间,这部分开销和引用版完全相同。临时变量同样是int,无额外开销。

简单说:两者内存开销没有区别。

性能表现

在开启编译器优化(比如O2)的情况下,引用版和正确的指针版生成的汇编代码几乎完全一致,性能没有任何差异。
即使没开优化,两者的执行逻辑也基本相同:都是通过地址定位到目标变量,读取值到临时变量,再完成赋值操作,不存在谁更快的情况。

唯一的区别是语法层面:引用版不需要手动写解引用操作符*,代码更简洁,也不容易出现像你原指针版那样的逻辑错误。

结论

正确实现的前提下,引用版和指针版在性能、内存开销上没有本质差异。但引用版的语法更安全、易用,实际开发中优先选引用实现swap。

内容的提问来源于stack exchange,提问作者NamLHD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:09:55