|
发表于 2013-8-11 10:50:46
|
显示全部楼层
7: int a;
8: a = 5;
00401598 mov dword ptr [ebp-4],5
9: int &b = a;
0040159F lea eax,[ebp-4]
004015A2 mov dword ptr [ebp-8],eax
10:
11: int *p = NULL;
004015A5 mov dword ptr [ebp-0Ch],0
12: p = &a;
004015AC lea ecx,[ebp-4]
004015AF mov dword ptr [ebp-0Ch],ecx
13: p = &b;
004015B2 mov edx,dword ptr [ebp-8]
004015B5 mov dword ptr [ebp-0Ch],edx
从这段代码中,我们可以看出如果定义(我认为引用变量占用空间,故称之为定义)一个引用变量,你可以看到b在上述代码中相当于[ebp-8],实际引用变量在内存中已经申请占了4个字节的空间。那些变量、常量、空语句神马的都会在编译后占用空间,从这点看 同一个 变量多次 引用就要占内存 。但是这时引用变量在编译以后 直接对引用的对象操作,这时就是他操作的时候占用的空间就是源对象本身的空间,并没有增加申请新的空间来保存临时的,因此没占用过内存空间。
其实占用不占用内存空间两个都对,因为C++标准里面并没有规定。可能也被编译器优化的很好后不占用内存。
望采纳~~~不懂可以追问 |
|