引用与指针的性能及内存开销对比咨询
引用与指针实现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
相关产品推荐
相关产品推荐

