变量的引用:int &b = a;

根据引用的定义,b作a的别名,不单独占用内存空间。如果取b和a的地址,会发现它们是相同的。

但程序怎么知道b是指向a的呢?如果b是个指针,程序将开辟一块内存空间,存储“b指向a”这一信息;如果没有一块内存空间来存储“b指向a”这一事实,程序读到b时应该不知所措,怎么能顺利知道b是a的别名呢?

实际上,b在内存条上是占用了一块空间的。不过编译器对它进行了一些处理,使得程序认为它不单独占用内存空间,且取其地址时直接取到所指向的地址。实际在内存空间上,引用本身也占用一块内存,里面存储着所引用的变量的地址,大小与指针相同,字面上也表现为unsigned long int型。只是经过编译器处理后,访问这块内存时将直接转而访问其指向的内存。因此在程序中无法读取到这块内存本身。

这可以理解为“编译器的把戏”或“程序的谎言”,但这一机制不是为了捉弄程序员,而是为了真正实现别名的效果。

综上:引用的实现实际上是占用内存空间的,但程序把它按照不占用内存空间来处理。

在不同编译器中,引用的实现方式可能会有不同。C++语言本身对此实现机制并无说明。因此上述实现机制可能仅适用于部分编译器。

补充:引用的“不占用内存"和宏定义的”不占用内存“不是一回事。二者都可以理解为”别名“,但引用是在程序运行过程中声明的,属于程序运行的层面;而宏定义是代码编译层面的,类似于对代码文本进行”全文替换“,不涉及程序运行,是真正的不占用内存。

C++变量的引用是否占用内存空间相关推荐

  1. c++:实型(浮点型float,double),sizeof统计float和double的占用内存空间,科学记数法表示小数:e

    c++:实型(浮点型float,double),sizeof统计float和double的占用内存空间,科学记数法表示小数:e 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,此时 ...

  2. C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...

  3. 如何计算变量或数据类型所占内存空间的大小

    内存的储存单元是一个线性地址表,是按字节进行编址的 一个字节可以表示的整数最小为0,最大为255,一个字节等于八个比特,也称二进制位 1B=8b 1KB=1024B 1MB=1024KB 之后更大的依 ...

  4. jupyter notebook占用内存空间过大打不开的解决办法(包括但不限于爬虫造成的)

    jupyter notebook由于超过内存限制而"锁死"的解决 这两天用爬虫爬数据的时候由于print了大量的爬取内容,让notebook内存溢出停止运行,连带着localhos ...

  5. java string占用内存_Java中String到底占用多大的内存空间?

    写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...

  6. PHP数组到底占用多少内存空间

    http://www.ituring.com.cn/article/498349 本文翻译自 nikic 的一篇博文. PHP中的数组到底占用多大的空间? 简要:这篇文章我并不是按照原文逐字逐句的都翻 ...

  7. 【超详细】Java各种类型所占用的内存空间究竟多大?

    文章目录 准备工作 对象内存占用情况 使用Jprofiler进行验证 [关于Retained Size的意思] 基本类型的包装类型内存占用 数组占用内存空间 String 对象内存占用空间 总结 准备 ...

  8. iis worker process内存占用大_安卓模拟器磁盘空间占用大/内存空间不足

    长期使用模拟器.模拟器多开等问题,都会占用内存空间,久而久之就会出现内存空间不足.硬盘占用大的现象,可能会导致模拟器在运行中崩溃,游戏及应用闪退,模拟器卡顿等问题.如何解决硬盘空间占用大和内存不足的问 ...

  9. 关于共用体所占的内存空间的问题

    共用体 `共用体(联合)` 共用体类型变量的定义 共用体变量的引用方式 共用体类型数据的特点 [例1]分析程序运行结果 [实训内容3]输入并运行以下程序,从输出的结果体会"共用"的 ...

最新文章

  1. 百度地图android室内定位,百度地图4.0正式发布,主打免费语音导航、室内定位、实时公交和生活搜索 (视频)...
  2. 幼儿园语言活动包括哪几类_幼儿园教育:《一起玩》语言活动教案
  3. 【Intellij IDEA系列】IDEA使用git提交代码流程
  4. Tomcat无法访问中文路径的解决办法
  5. TPAMI 2020 | 高分辨率网络对计算机视觉任务的影响
  6. 处理字符串_1_生成自增值
  7. Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
  8. Linux下解决发布Qt程序报错:it could not find or load the Qt platform plugin “xcb” in “”
  9. 从入门到精通 pdf_【推荐】铅笔素描从入门到精通pdf|素描基础教程电子书下载!...
  10. OpenCV (iOS)中的形态学变换(11)
  11. 微信又添新表情,“我裂开了”!
  12. cout不明确什么意思_不计免赔险是什么意思?弄不清楚要吃大亏
  13. python怎么导入csv文件数据-机器学习Python实践——数据导入(CSV)
  14. java计算机毕业设计企业员工工资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  15. windows 窗口实现隐藏任务栏预览
  16. Python100天学习教程(Python学习视频_Python学习路线):Day01 初识Python
  17. 曾经沧海难为水,除却巫山不是云。
  18. 再也不用熬夜爆肝做汇报了!PPT生成神器ChatBCG来啦!
  19. vue3基础 —— 子传父
  20. Convert() 转换时 报错:输入字符串的格式不正确

热门文章

  1. tp5使用monolog_使用Monolog记录:从Devtools到Slack
  2. 将 ICDAR 2015 的 Ground Truth 标注在图像数据上
  3. 前世今生的痴,问谁可以洞悉
  4. Win10 Linux子系统编译Android系统源码
  5. 为什么神经网络层数越多越好?训练次数与层数的区别与联系
  6. 【贪心算法】poj 2431: Expedition(最优加油方法)
  7. Java字符串相似度匹配
  8. 如何搭建 Jenkins 自动化测试平台?
  9. npm国外镜像,国内镜像互相切换
  10. 如何用计算机弹奏出伏拉夫雏形曲,利用计算机实现用电子键盘弹奏出真实乐器声音的方法...