本文主要是介绍引用是否占用内存空间?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
反汇编看一下:
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的地址进行修改。
这篇关于引用是否占用内存空间?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!