C++中的引用占用内存吗?有的说有,有的说没有,到底有没有啊?
3个回答
展开全部
引用也是变量,是变量就有地址,有地址就占内存。
例如下面的代码:加粗的是c++代码,其他是汇编,可以看出两个引用都占用了一个指针大小的内存
int i = 1;
007B2712 mov dword ptr [i],1 在堆栈里开辟一个int大小内存存储1
int& ri1 = i;
007B2719 lea eax,[i] 取i的地址到eax寄存器
007B271C mov dword ptr [ri1],eax 把eax的值(就是刚才的i的地址)放到一个指针里
int& ri2 = i;
007B271F lea eax,[i]
007B2722 mov dword ptr [ri2],eax 把eax的值(就是刚才的i的地址)放到一个指针
里 int ii = ri1 + ri2;
所以引用是用指针来实现的,指针肯定要占用存储空间,也有地址,但是通过常规手段也无法找到引用的地址,取引用的地址,取来的是本尊的地址:
&ri1 &ri2 &i,都是一个值。
展开全部
这个要从两个方面来看,从我们使用C语言的角度,引用并没有产生新的变量,所以我们理解为不占用内存也是合理的。但是从编译器的角度,我们知道引用的是由指针实现的,由编译器对指针做了一层包装,所以引用对于编译器来说就是指针,是占用内存的。黑马程序员公开课里面就讲过这个。我的答案帮助你了吗?如果是,请采纳
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引用最终不占内存,编译时,会直接用所引用的对象来替换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询