C++中的引用变量在内存中存放的位置
2009-01-06 10:37
441 查看
这几天一直在思考一些问题,就是引用变量在一些教材上的说法是一个变量的别名,那么引用变量本身是否占用空间呢?
比如说:(本人使用的是vc++6.0编译器)
int a = 10;
int & r = a;
cout << &a << endl;
cout << &r << endl;
从上面的例子当中可以看出:它们得出的结果是相同的,这时便会有人说,r和a所占用的内存空间是相同的,因为打印出来的地址是相同的。所以这些教材上对于引用变量的操作,称之为声明一个引用变量,而非定义。因为教材的编写者认为引用变量并不占用空间。
但是,如果你使用调试器调试一下,看一下汇编的代码,就会产生新的迷惑了。
00401040 push ebp
00401041 mov ebp,esp
00401043 sub esp,48h
00401046 push ebx
00401047 push esi
00401048 push edi
00401049 lea edi,[ebp-48h]
0040104C mov ecx,12h
00401051 mov eax,0CCCCCCCCh
00401056 rep stos dword ptr [edi]
5: int a = 10;
00401058 mov dword ptr [ebp-4],0Ah
6: int & r = a;
0040105F lea eax,[ebp-4]
00401062 mov dword ptr [ebp-8],eax
从这段汇编代码来看,r和a的空间并不相同,那这又怎么解释呢?
基于此,我得出了一个非常合理的解释:
如果定义(我认为引用变量占用空间,故称之为定义)一个引用变量,这个时候引用变量实际上在内存中已经申请了一个空间,是4个字节的(32bit系统中),它本身和指针是相同的。也就是说引用和指针对于编译器本身来说操作是相同的,只是对于用户来说操作不同而已。
接下来又会有人问:那么为什么上面程序的结果打印出来的地址是相同的呢?
其实这只是编译器给你的假象而已。当你将r引用给了a,当想要打印&r的时候,编译器会自动将其引用的对象的地址打印出来,也就是将a的地址打印出来,这也就是它们打印结果相同的原因了。
注:以上的解释都是本人的研究结果,并没有经过官方的证实,如果哪为网友对此有新的看法,不吝赐教,非常感谢!
比如说:(本人使用的是vc++6.0编译器)
int a = 10;
int & r = a;
cout << &a << endl;
cout << &r << endl;
从上面的例子当中可以看出:它们得出的结果是相同的,这时便会有人说,r和a所占用的内存空间是相同的,因为打印出来的地址是相同的。所以这些教材上对于引用变量的操作,称之为声明一个引用变量,而非定义。因为教材的编写者认为引用变量并不占用空间。
但是,如果你使用调试器调试一下,看一下汇编的代码,就会产生新的迷惑了。
00401040 push ebp
00401041 mov ebp,esp
00401043 sub esp,48h
00401046 push ebx
00401047 push esi
00401048 push edi
00401049 lea edi,[ebp-48h]
0040104C mov ecx,12h
00401051 mov eax,0CCCCCCCCh
00401056 rep stos dword ptr [edi]
5: int a = 10;
00401058 mov dword ptr [ebp-4],0Ah
6: int & r = a;
0040105F lea eax,[ebp-4]
00401062 mov dword ptr [ebp-8],eax
从这段汇编代码来看,r和a的空间并不相同,那这又怎么解释呢?
基于此,我得出了一个非常合理的解释:
如果定义(我认为引用变量占用空间,故称之为定义)一个引用变量,这个时候引用变量实际上在内存中已经申请了一个空间,是4个字节的(32bit系统中),它本身和指针是相同的。也就是说引用和指针对于编译器本身来说操作是相同的,只是对于用户来说操作不同而已。
接下来又会有人问:那么为什么上面程序的结果打印出来的地址是相同的呢?
其实这只是编译器给你的假象而已。当你将r引用给了a,当想要打印&r的时候,编译器会自动将其引用的对象的地址打印出来,也就是将a的地址打印出来,这也就是它们打印结果相同的原因了。
注:以上的解释都是本人的研究结果,并没有经过官方的证实,如果哪为网友对此有新的看法,不吝赐教,非常感谢!
相关文章推荐
- C++中的引用变量在内存中存放的位置
- c++的代码、变量在内存中的存放位置
- C++的引用类型的变量到底占不占用内存空间?
- C++中全局变量、静态变量、自动变量的在内存中的位置【DEBUG】
- 基本类型和引用类型的变量在内存存放的内容及对象
- C++反汇编学习笔记6——变量在内存中的位置和访问方式
- 转:C/C++变量在内存中的位置以及初始化问题
- C++中变量在内存中位置说明
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言中局部变量和全局变量在内存中的存放位置
- 【C++探索之旅】第一部分第四课:内存,变量和引用
- [C++]内置类型变量在内存中的存放
- c中的变量在内存中存放的位置
- C/C++学习(8)变量在内存中的存储位置
- 变量在内存中的存放位置
- C/C++变量在内存中的位置以及初始化问题
- 【C++探索之旅】第一部分第四课:内存,变量和引用
- C++的引用类型的变量到底占不占用内存空间?
- C语言那年踩过的坑--局部变量,静态变量,全局变量在内存中存放的位置
- C/C++中关于地址、指针和引用变量的学习笔记(九) : 内存结构