C++变量的引用是否占用内存空间
变量的引用:int &b = a;
根据引用的定义,b作a的别名,不单独占用内存空间。如果取b和a的地址,会发现它们是相同的。
但程序怎么知道b是指向a的呢?如果b是个指针,程序将开辟一块内存空间,存储“b指向a”这一信息;如果没有一块内存空间来存储“b指向a”这一事实,程序读到b时应该不知所措,怎么能顺利知道b是a的别名呢?
实际上,b在内存条上是占用了一块空间的。不过编译器对它进行了一些处理,使得程序认为它不单独占用内存空间,且取其地址时直接取到所指向的地址。实际在内存空间上,引用本身也占用一块内存,里面存储着所引用的变量的地址,大小与指针相同,字面上也表现为unsigned long int型。只是经过编译器处理后,访问这块内存时将直接转而访问其指向的内存。因此在程序中无法读取到这块内存本身。
这可以理解为“编译器的把戏”或“程序的谎言”,但这一机制不是为了捉弄程序员,而是为了真正实现别名的效果。
综上:引用的实现实际上是占用内存空间的,但程序把它按照不占用内存空间来处理。
在不同编译器中,引用的实现方式可能会有不同。C++语言本身对此实现机制并无说明。因此上述实现机制可能仅适用于部分编译器。
补充:引用的“不占用内存"和宏定义的”不占用内存“不是一回事。二者都可以理解为”别名“,但引用是在程序运行过程中声明的,属于程序运行的层面;而宏定义是代码编译层面的,类似于对代码文本进行”全文替换“,不涉及程序运行,是真正的不占用内存。
C++变量的引用是否占用内存空间相关推荐
- c++:实型(浮点型float,double),sizeof统计float和double的占用内存空间,科学记数法表示小数:e
c++:实型(浮点型float,double),sizeof统计float和double的占用内存空间,科学记数法表示小数:e 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,此时 ...
- C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...
- 如何计算变量或数据类型所占内存空间的大小
内存的储存单元是一个线性地址表,是按字节进行编址的 一个字节可以表示的整数最小为0,最大为255,一个字节等于八个比特,也称二进制位 1B=8b 1KB=1024B 1MB=1024KB 之后更大的依 ...
- jupyter notebook占用内存空间过大打不开的解决办法(包括但不限于爬虫造成的)
jupyter notebook由于超过内存限制而"锁死"的解决 这两天用爬虫爬数据的时候由于print了大量的爬取内容,让notebook内存溢出停止运行,连带着localhos ...
- java string占用内存_Java中String到底占用多大的内存空间?
写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...
- PHP数组到底占用多少内存空间
http://www.ituring.com.cn/article/498349 本文翻译自 nikic 的一篇博文. PHP中的数组到底占用多大的空间? 简要:这篇文章我并不是按照原文逐字逐句的都翻 ...
- 【超详细】Java各种类型所占用的内存空间究竟多大?
文章目录 准备工作 对象内存占用情况 使用Jprofiler进行验证 [关于Retained Size的意思] 基本类型的包装类型内存占用 数组占用内存空间 String 对象内存占用空间 总结 准备 ...
- iis worker process内存占用大_安卓模拟器磁盘空间占用大/内存空间不足
长期使用模拟器.模拟器多开等问题,都会占用内存空间,久而久之就会出现内存空间不足.硬盘占用大的现象,可能会导致模拟器在运行中崩溃,游戏及应用闪退,模拟器卡顿等问题.如何解决硬盘空间占用大和内存不足的问 ...
- 关于共用体所占的内存空间的问题
共用体 `共用体(联合)` 共用体类型变量的定义 共用体变量的引用方式 共用体类型数据的特点 [例1]分析程序运行结果 [实训内容3]输入并运行以下程序,从输出的结果体会"共用"的 ...
最新文章
- 百度地图android室内定位,百度地图4.0正式发布,主打免费语音导航、室内定位、实时公交和生活搜索 (视频)...
- 幼儿园语言活动包括哪几类_幼儿园教育:《一起玩》语言活动教案
- 【Intellij IDEA系列】IDEA使用git提交代码流程
- Tomcat无法访问中文路径的解决办法
- TPAMI 2020 | 高分辨率网络对计算机视觉任务的影响
- 处理字符串_1_生成自增值
- Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
- Linux下解决发布Qt程序报错:it could not find or load the Qt platform plugin “xcb” in “”
- 从入门到精通 pdf_【推荐】铅笔素描从入门到精通pdf|素描基础教程电子书下载!...
- OpenCV (iOS)中的形态学变换(11)
- 微信又添新表情,“我裂开了”!
- cout不明确什么意思_不计免赔险是什么意思?弄不清楚要吃大亏
- python怎么导入csv文件数据-机器学习Python实践——数据导入(CSV)
- java计算机毕业设计企业员工工资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
- windows 窗口实现隐藏任务栏预览
- Python100天学习教程(Python学习视频_Python学习路线):Day01 初识Python
- 曾经沧海难为水,除却巫山不是云。
- 再也不用熬夜爆肝做汇报了!PPT生成神器ChatBCG来啦!
- vue3基础 —— 子传父
- Convert() 转换时 报错:输入字符串的格式不正确
热门文章
- tp5使用monolog_使用Monolog记录:从Devtools到Slack
- 将 ICDAR 2015 的 Ground Truth 标注在图像数据上
- 前世今生的痴,问谁可以洞悉
- Win10 Linux子系统编译Android系统源码
- 为什么神经网络层数越多越好?训练次数与层数的区别与联系
- 【贪心算法】poj 2431: Expedition(最优加油方法)
- Java字符串相似度匹配
- 如何搭建 Jenkins 自动化测试平台?
- npm国外镜像,国内镜像互相切换
- 如何用计算机弹奏出伏拉夫雏形曲,利用计算机实现用电子键盘弹奏出真实乐器声音的方法...