鱼C论坛

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

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

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

望采纳~~~不懂可以追问
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-11 13:18:18 | 显示全部楼层

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

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

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

差不多这个意思吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-10 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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