加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++中引用占不占内存

(2018-09-25 08:32:22)
分类: c及c_plus_plus
在C 中我们说“引用不占内存”是从C 程序员的角度来看。请看下列程序的运行结果。

#include < iostream >
using namespace std;
int main(int argc, char** argv)
{
      char c;
      double i;
      double &k = i;
      char   &m = c;
      double *p = &i;
      char   *q = &c;
      cout << "Result :" << endl;
      cout << " i = " << sizeof(i) << endl;
      cout << " k = " << sizeof(k) << endl;
      cout << " c = " << sizeof(c) << endl;
      cout << " m = " << sizeof(m) << endl;
      cout << " p = " << sizeof(p) << endl;
      cout << " q = " << sizeof(q) << endl;
      return 0;
}

运行结果为:
Result :
 i = 8
 k = 8
 c = 1
 m = 1
 p = 4
 q = 4

显然,对于引用变量k来说,sizeof(k)的结果为8,sizeof(m)的结果为1,这样的结果实际是被引用对象所占内存的大小,k引用的是double类型,所以占8个字节;m引用的是char类型,所以占1个字节。这与指针变量完全不同,从运行结果可以看出,不论指针变量指向的数据类型是什么,指针变量(p、q)均占用4个字节。进一步可以用C 程序证明,对于引用变量的处理直接操作的对象就是被引用对象。所以从C 的角度来说,引用本身不会为变量开辟新的存储空间,引用只是为实际对象起了一个别名。

C 程序不能在计算机上直接运行,必须经过编译器将C 程序编译生成汇编程序,从编译的角度来看,C 编译器对引用的处理与对于指针的处理是相同的,均是为变量分配一个对应的内存空间。所以,站在编译器开发者的角度来看,在编译器中要实现引用就必须要为引用变量分配一个内存空间。

所以两个视角不能混淆。

0

阅读 收藏 喜欢 打印举报/Report
后一篇:继承与组合
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有