|
发表于 2021-8-17 22:15:36
|
显示全部楼层
在 C++ 层才区分引用和指针,在汇编语言层看来,引用和指针没有区别,都是一个地址
也就是说在汇编语言层,引用和指针是一回事
- #include <iostream>
- int main() {
- int a = 1;
- int *pa = &a;
- int &ra = a;
- return 0;
- }
复制代码
- _main:
- pushl %ebp
- movl %esp, %ebp
- andl $-16, %esp
- subl $16, %esp
- call ___main
-
- ; int a = 1;
- movl $1, 4(%esp)
-
- ; int *pa = &a;
- leal 4(%esp), %eax
- movl %eax, 12(%esp) ; 12(%esp) 是变量 pa 的地址
-
- ; int &ra = a;
- leal 4(%esp), %eax
- movl %eax, 8(%esp) ; 8(%esp) 是变量 ra 的地址
-
- ; return 0;
- movl $0, %eax
- leave
- ret
复制代码
可以看到,在汇编语言层,引用和指针是完全一样的
一个 leal 和一个 movl
|
|