对C++中引用和指针的反汇编对比问题
本帖最后由 Crazy迷恋. 于 2013-8-11 11:18 编辑今天闲着闹心,突然想到了一个问题。C++中的引用和指针。比如传送一个指针进一个函数是四个字节,传送一个引用就不一样了。它的大小就是引用变量的大小。最近学了点汇编,手痒~~~直接给反到汇编去了。为什么指针和引用是一样的呢?
反汇编结果如下:
int a;
a=5;
00CD1AAEmov dword ptr ,5
int &b=a;
00CD1AB5lea eax,
00CD1AB8mov dword ptr ,eax
下边发一个指针:
int *p=NULL;
00CD1B3Bmov dword ptr ,0
p=&a;
00CD1B42lea eax,
00CD1B45mov dword ptr ,eax
std::cin.get();
就是偏移地址不一样。其他都一样~~~差距咋这么大呢?
00CD1AB5lea eax,
00CD1AB8mov dword ptr ,eax
引用里边dword ptr ,eax同样给【b】这个地址传送一个地址。那它的大小也应该是一个地址的大小。很费解啊~~~
7: int a;
8: a = 5;
00401598 mov dword ptr ,5
9: int &b = a;
0040159F lea eax,
004015A2 mov dword ptr ,eax
10:
11: int *p = NULL;
004015A5 mov dword ptr ,0
12: p = &a;
004015AC lea ecx,
004015AF mov dword ptr ,ecx
13: p = &b;
004015B2 mov edx,dword ptr
004015B5 mov dword ptr ,edx
从这段代码中,我们可以看出如果定义(我认为引用变量占用空间,故称之为定义)一个引用变量,你可以看到b在上述代码中相当于,实际引用变量在内存中已经申请占了4个字节的空间。那些变量、常量、空语句神马的都会在编译后占用空间,从这点看 同一个变量多次 引用就要占内存。但是这时引用变量在编译以后 直接对引用的对象操作,这时就是他操作的时候占用的空间就是源对象本身的空间,并没有增加申请新的空间来保存临时的,因此没占用过内存空间。
其实占用不占用内存空间两个都对,因为C++标准里面并没有规定。可能也被编译器优化的很好后不占用内存。
望采纳~~~不懂可以追问{:5_91:} zer0 发表于 2013-8-11 10:50 static/image/common/back.gif
7: int a;
8: a = 5;
00401598 mov dword ptr ,5
说了那么多,还是没看懂 竹林小溪 发表于 2013-8-11 13:00 static/image/common/back.gif
说了那么多,还是没看懂
占用不占用内存空间两个都对,看你怎么理解~
占用内存 :你申请这个变量b肯定是占用了4字节内存
不占用内存: 在你操作这个引用变量的时候 不会使用额外的空间,不会再申请新的内存空间~
差不多这个意思吧 不好意思,最近太忙,没什么时候上网……
看来问题解决了,我最起码不自责了…… 沉思者 发表于 2013-8-13 10:58
不好意思,最近太忙,没什么时候上网……
看来问题解决了,我最起码不自责了……
?我去者么久不见你出来逛了
页:
[1]