C++中的引用占用内存吗?有的说有,有的说没有,到底有没有啊?

 我来答
heptnaol
2020-04-22 · TA获得超过7259个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1729万
展开全部

引用也是变量,是变量就有地址,有地址就占内存。

例如下面的代码:加粗的是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,都是一个值。

珂蚪000
2020-04-24 · 超过38用户采纳过TA的回答
知道答主
回答量:145
采纳率:20%
帮助的人:29.5万
展开全部
这个要从两个方面来看,从我们使用C语言的角度,引用并没有产生新的变量,所以我们理解为不占用内存也是合理的。但是从编译器的角度,我们知道引用的是由指针实现的,由编译器对指针做了一层包装,所以引用对于编译器来说就是指针,是占用内存的。黑马程序员公开课里面就讲过这个。我的答案帮助你了吗?如果是,请采纳
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
331434376
2020-04-23 · 超过23用户采纳过TA的回答
知道答主
回答量:164
采纳率:43%
帮助的人:36.8万
展开全部
引用最终不占内存,编译时,会直接用所引用的对象来替换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式