C++之引用揭秘
2015-11-30 16:57
323 查看
测试代码
#include <iostream>
#include <stdio.h>
using namespace std;
void fun(int &b)
{
int a = b;
cout << a;
}
int main()
{
int a = 8;
fun(a);
return 0;
}
第二条汇编指令将8这个值存储到变量a在栈中的空间。第三条指令将变量a的地址放到寄存器eax中。
可以看到,eax的值为0x29fefc,这个地址为虚拟地址空间的地址。光标处汇编指令将该值压入栈中,作为调用函数fun()的参数
顺表提一下,为什么指针总是4字节大小,32位机器,内存最大4G,32根地址线,所以就是4个字节。
在调用fun函数后,
如图,光标处,即取出参数值,该值为变量a的地址,下一条指令根据地址取出变量a的值。由此可见,引用和指针本质上上是相同的。
但是引用更为安全。原因很简单了,用一个指针像是用一个变量一样方便,不用*取值操作。CPU的指令无非是读内存,写内存,逻辑,算数,读写寄存器。万变不离其宗
#include <iostream>
#include <stdio.h>
using namespace std;
void fun(int &b)
{
int a = b;
cout << a;
}
int main()
{
int a = 8;
fun(a);
return 0;
}
第二条汇编指令将8这个值存储到变量a在栈中的空间。第三条指令将变量a的地址放到寄存器eax中。
可以看到,eax的值为0x29fefc,这个地址为虚拟地址空间的地址。光标处汇编指令将该值压入栈中,作为调用函数fun()的参数
顺表提一下,为什么指针总是4字节大小,32位机器,内存最大4G,32根地址线,所以就是4个字节。
在调用fun函数后,
如图,光标处,即取出参数值,该值为变量a的地址,下一条指令根据地址取出变量a的值。由此可见,引用和指针本质上上是相同的。
但是引用更为安全。原因很简单了,用一个指针像是用一个变量一样方便,不用*取值操作。CPU的指令无非是读内存,写内存,逻辑,算数,读写寄存器。万变不离其宗
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Python动态类型的学习---引用的理解
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- 汇编语言无效指令错误概述
- Lua教程(二):C++和Lua相互传递数据示例
- Shell脚本中引用、调用另一个脚本文件的2种方法
- vbs引用另一个vbs的代码
- C++联合体转换成C#结构的实现方法
- 汇编语言超浓缩教程
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结