引用是否占用内存空间?

2024-04-19 14:48

本文主要是介绍引用是否占用内存空间?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

反汇编看一下:

int n = 2;
int main(){int a = n;int & b = a;b = 3;
}

生成可执行文件,反汇编得到:

a.out:	file format Mach-O 64-bit x86-64Disassembly of section __TEXT,__text:
__text:
100000f90:	55 	pushq	%rbp
100000f91:	48 89 e5 	movq	%rsp, %rbp
100000f94:	31 c0 	xorl	%eax, %eax
100000f96:	8b 0d 64 00 00 00 	movl	100(%rip), %ecx
100000f9c:	89 4d fc 	movl	%ecx, -4(%rbp)
100000f9f:	48 8d 55 fc 	leaq	-4(%rbp), %rdx
100000fa3:	48 89 55 f0 	movq	%rdx, -16(%rbp)
100000fa7:	48 8b 55 f0 	movq	-16(%rbp), %rdx
100000fab:	c7 02 03 00 00 00 	movl	$3, (%rdx)
100000fb1:	5d 	popq	%rbp
100000fb2:	c3 	retq_main:
100000f90:	55 	pushq	%rbp
100000f91:	48 89 e5 	movq	%rsp, %rbp
100000f94:	31 c0 	xorl	%eax, %eax
100000f96:	8b 0d 64 00 00 00 	movl	100(%rip), %ecx
100000f9c:	89 4d fc 	movl	%ecx, -4(%rbp)        //变量a
100000f9f:	48 8d 55 fc 	leaq	-4(%rbp), %rdx
100000fa3:	48 89 55 f0 	movq	%rdx, -16(%rbp)//引用b,存储a的地址
100000fa7:	48 8b 55 f0 	movq	-16(%rbp), %rdx
100000fab:	c7 02 03 00 00 00 	movl	$3, (%rdx)
100000fb1:	5d 	popq	%rbp
100000fb2:	c3 	retq

结论:
从反汇编的结果看,编译器也为引用在栈中分配了空间,存储的是变量a的地址,且和指针变量一样占据8个字节。
通过引用改变变量a的值,编译器从引用获取变量a的地址进行修改。

这篇关于引用是否占用内存空间?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/917842

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

Java资源管理和引用体系的使用详解

《Java资源管理和引用体系的使用详解》:本文主要介绍Java资源管理和引用体系的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Java的引用体系1、强引用 (Strong Reference)2、软引用 (Soft Reference)3、弱引用 (W

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D