鱼C论坛

 找回密码
 立即注册
查看: 3350|回复: 5

对C++中引用和指针的反汇编对比问题

[复制链接]
发表于 2013-8-11 10:50:45 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 Crazy迷恋. 于 2013-8-11 11:18 编辑

今天闲着闹心,突然想到了一个问题。C++中的引用和指针。比如传送一个指针进一个函数是四个字节,传送一个引用就不一样了。它的大小就是引用变量的大小。最近学了点汇编,手痒~~~直接给反到汇编去了。为什么指针和引用是一样的呢?
反汇编结果如下:
int a;
a=5;
00CD1AAE  mov         dword ptr [a],5  
int &b=a;
00CD1AB5  lea         eax,[a]  
00CD1AB8  mov         dword ptr [b],eax
  
下边发一个指针:
int *p=NULL;
00CD1B3B  mov         dword ptr [p],0  
p=&a;
00CD1B42  lea         eax,[a]  
00CD1B45  mov         dword ptr [p],eax  

std::cin.get();
就是偏移地址不一样。其他都一样~~~差距咋这么大呢?
00CD1AB5  lea         eax,[a]  
00CD1AB8  mov         dword ptr [b],eax
  
引用里边dword ptr ,eax  同样给【b】这个地址传送一个地址。那它的大小也应该是一个地址的大小。很费解啊~~~
[/b][/b]

最佳答案

查看完整内容

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 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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++标准里面并没有规定。可能也被编译器优化的很好后不占用内存。

望采纳~~~不懂可以追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-11 13:00:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-11 13:18:18 | 显示全部楼层
竹林小溪 发表于 2013-8-11 13:00
说了那么多,还是没看懂

占用不占用内存空间两个都对,看你怎么理解~

占用内存 :你申请这个变量b肯定是占用了4字节内存

不占用内存: 在你操作这个引用变量的时候 不会使用额外的空间,不会再申请新的内存空间~

差不多这个意思吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-13 10:58:03 | 显示全部楼层
不好意思,最近太忙,没什么时候上网……
看来问题解决了,我最起码不自责了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-25 21:02:31 | 显示全部楼层
沉思者 发表于 2013-8-13 10:58
不好意思,最近太忙,没什么时候上网……
看来问题解决了,我最起码不自责了……

?  我去者么久不见你出来逛了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 21:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表