指针与引用的性能比较

本文通过实验对比了传引用与传指针在效率上的差异,结果显示传引用在函数调用时效率更高。文章还深入探讨了两者在内存分配、初始化、多级引用等方面的不同,并通过代码示例和汇编代码分析,详细解释了它们的本质区别。
部署运行你感兴趣的模型镜像

我们先来看一下传指针与传引用的效率方面的对比吧

  • 本质上来说了,传引用是一个变量的别名而已。并没有开辟新的空间。而指针了是指向一个空间对应一个空间的地址
  • 好吧,我们分别通过两者效率,和本质方面看一下两者之间的区别吧。
    -首先看一下两者的效率
    看代码

#include<iostream>
#include<time.h>
using namespace std;
//memcpy浅拷贝
//typeid
struct A { 
	int a[10000];
};


void TestFunc1(A a) {}

void TestFunc2(A& a) {}

void TestRefAndValue() {
	A a;

	// 以指针作为函数参数   
	size_t begin1 = clock();  

	for (size_t i = 0; i < 10000; ++i)    
		TestFunc1(a);  
	
		size_t end1 = clock();

	// 以引用作为函数参数   
		size_t begin2 = clock();   
		for (size_t i = 0; i < 10000; ++i)   
			TestFunc2(a);   
		size_t end2 = clock();
		cout << "TestFunc1(int*)-time:" << end1 - begin1 << endl;  
		cout << "TestFunc2(int&)-time:" << end2 - begin2 << endl;
}

// 运行多次,检测指针和引用在传参方面的效率区别 
int main() {    for (int i = 0; i < 10; ++i)   
	{      
		TestRefAndValue();   
	}         
		return 0;
}


在这里插入图片描述
传引用还是要快一些啊!!!
传值传指针还是有一点区别的啊

  • 在来看一下他们调用过程中的汇编代码
int main() 
{
	int a = 10;        
	int& ra = a;  
	ra = 20;      
	int* pa = &a;    
	*pa = 20;     
	return 0;
}

在这里插入图片描述
其实了,可以发现引用就是一个别名,没有独立的空间,何其引用实体共用同一块内存空间,但是底层了实际上是有空间的,引用是按照指针方式来实现的

  • 总结一下
  • 引用和指针的不同点:
    1. 引用在定义时必须初始化,指针没有要求
    1. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型 实体
    1. 没有NULL引用,但有NULL指针
    1. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占 4个字节)
    1. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
    1. 有多级指针,但是没有多级引用
    1. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
    1. 引用比指针使用起来相对更

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值