引用会占用内存空间吗?引用只是一个别名,我认为不会占内存空间,是这样吗?

bztsgq 2009-10-15 04:10:31
引用会占用内存空间吗?引用只是一个别名,我认为不会占内存空间,是这样吗?

但是反过来一想,别名在内存中如何体现呢?
所以引用是不是就是原变量的副本呀?

int a;
int &b=a;

此时,a在内存中占用4个字节,是不是内存中也有一个b呢?这个b是a的副本。
但是也不对,如果那样,从内存模型上看不出,b是a的另一个名字呀。

一个变量的空间,对应多个别名,这在内存模型上是什么样的呢?
...全文
952 29 打赏 收藏 举报
写回复
29 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
霖中有雨 2021-06-24

一样会占据内存空间的,只不过对象引用是在栈中,对象是在堆中

  • 打赏
  • 举报
回复
bztsgq 2009-10-16
up
  • 打赏
  • 举报
回复
butwang 2009-10-16
引用和指针一样都有自己的内存,并且大小都是4字节,存放所指变量的地址,

但引用的sizeof值和引用的变量大小一样,对引用的操作和的变量完全一致
  • 打赏
  • 举报
回复
wensheng_zh2007 2009-10-15
int main()
{
int a;
int &b = a;
printf("%d",sizeof(int &));

return 0;
}

结果是4
struct sss{};
int main()
{
int a;
int &b = a;
printf("%d",sizeof(sss));

return 0;
}

结果是1
都是在vc6中测试的
  • 打赏
  • 举报
回复
cba_v 2009-10-15
[Quote=引用 17 楼 zhangjundriver 的回复:]
引用 15 楼 pcboyxhy 的回复:
引用 13 楼 pcboyxhy 的回复:
struct A{};

sizeof(A)会是多少呢?  呵呵


gcc下面是1,不知道vc是多少

基本上也是1,测试下不就好了
[/Quote]
一般 空类 都会插入一个char类型吧
  • 打赏
  • 举报
回复
wutao596 2009-10-15
引用应该是不是创建了实体的副本。因为引用作为形参是会改变实体的值的。引用如果占用内存,那也只是来存引用名的。对了。
  • 打赏
  • 举报
回复
御用程序员 2009-10-15
感觉引用和指针都是操纵地址的。

指针操纵的是地址,表达给用户看的也是地址,

但是引用操纵的是地址,但是表达给用户看的是地址上的内容,

比如 int a=5; a的地址是0x00000001;

a的指针操作的是0x00000001,我们看到的也是0x00000001;
但是
a的应用操作的是0x00000001,我们看到的却是0x00000001上面存放的值5;

个人理解。
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 axx1611 的回复:]
struct xxx { int& ref; };

这玩意能编过吗。。。 至少要有构造函数去初始化吧
[/Quote]
当然能,可以用初始化列表。

struct xxx
{
double& ref;
};
int main()
{
double d = 1234.567;
xxx x = { d };

printf("%d\t%d\t%f\n" , sizeof(double),sizeof(xxx) , x.ref );
return 0;
}
  • 打赏
  • 举报
回复
axx1611 2009-10-15
struct xxx { int& ref; };

这玩意能编过吗。。。 至少要有构造函数去初始化吧
  • 打赏
  • 举报
回复
cphj 2009-10-15
struct AA{};
sizeof(AA)
结果也是1
  • 打赏
  • 举报
回复
cphj 2009-10-15
struct AA{};
用放.cpp文件里面,VC可以编译通过
  • 打赏
  • 举报
回复
zhkjoy 2009-10-15
[Quote=引用 17 楼 zhangjundriver 的回复:]
引用 15 楼 pcboyxhy 的回复:
引用 13 楼 pcboyxhy 的回复:
struct A{};

sizeof(A)会是多少呢?  呵呵


gcc下面是1,不知道vc是多少

基本上也是1,测试下不就好了
[/Quote]

貌似struct AA{}; 在VC编译就不通过。
  • 打赏
  • 举报
回复
zhangjundriver 2009-10-15
[Quote=引用 15 楼 pcboyxhy 的回复:]
引用 13 楼 pcboyxhy 的回复:
struct A{};

sizeof(A)会是多少呢?  呵呵


gcc下面是1,不知道vc是多少
[/Quote]
基本上也是1,测试下不就好了
  • 打赏
  • 举报
回复
2009-10-15
[Quote=引用 15 楼 pcboyxhy 的回复:]
引用 13 楼 pcboyxhy 的回复:
struct A{};

sizeof(A)会是多少呢?  呵呵


gcc下面是1,不知道vc是多少
[/Quote]
反正不会是零~~
  • 打赏
  • 举报
回复
pcboyxhy 2009-10-15
[Quote=引用 13 楼 pcboyxhy 的回复:]
struct A{};

sizeof(A)会是多少呢?  呵呵
[/Quote]

gcc下面是1,不知道vc是多少
  • 打赏
  • 举报
回复
2009-10-15
[Quote=引用 2 楼 akirya 的回复:]
当然占用空间了.
C/C++ codestruct xxx
{int&ref;
};
sizeof看看xxx是多少
[/Quote]
发现这个技巧可以解决一个问题,多谢启迪~~
  • 打赏
  • 举报
回复
pcboyxhy 2009-10-15
struct A{};

sizeof(A)会是多少呢? 呵呵
  • 打赏
  • 举报
回复
冻结 2009-10-15
据说,引用大都用指针实现。
指针是占用内存。
看编译器了。
  • 打赏
  • 举报
回复
amossavez 2009-10-15
[Quote=引用 9 楼 bztsgq 的回复:]
引用 2 楼 akirya 的回复:
当然占用空间了.
C/C++ codestruct xxx
{int&ref;
};
sizeof看看xxx是多少

这样判断不对吧。这样得到的是它所引用的那个变量的空间占用呀。
我问的是,引用本身占不占内存。
如果这个随编译器不同而不同的话,我就问vc下,占不占内存呢?

[/Quote]
占用!
  • 打赏
  • 举报
回复
你试试这个

不过还真没注意到标准这么规定

#include<stdio.h>

struct xxx {
double& ref;
};

int main()
{
printf("%d\t%d\n" , sizeof(double) , sizeof(xxx) );
}
  • 打赏
  • 举报
回复
加载更多回复(9)
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2009-10-15 04:10
社区公告
暂无公告