64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class No_Ref
{
public:
int a;
No_Ref():a(0){}
};
class Ref
{
public:
int a;
int & c;
Ref():a(0),c(a){}
};
int main()
{
cout<<"类No_Ref大小:"<<sizeof(No_Ref)<<endl;
cout<<"类Ref大小:"<<sizeof(Ref)<<endl;
cout<<"引用变量占用的内存:"<<sizeof(Ref)-sizeof(No_Ref)<<endl;
}
#include <iostream>
using namespace std;
int main()
{
int i;
int j;
int k;
int &ref = i;
int t;
cout<<&i<<" "<<&j<<" "<<&k<<" "<<&t<<endl;
//若ref不占用内存,则i,j,k,t,的地址差应该相同
cout<<"&i-&j="<<sizeof(int)*(&i-&j)
<<" &j-&k="<<sizeof(int)*(&j-&k)
<<" &k-&t="<<sizeof(int)*(&k-&t)<<endl;
cout<<"引用变量占用的内存:"<<sizeof(int)*(&k-&t)-sizeof(int)*(&j-&k)<<endl;
return 0;
}
int a = 0xfebc;
int& b = a;
34: int a = 0xfebc;
00401458 C7 45 FC BC FE 00 00 mov dword ptr [ebp-4],0FEBCh
35: int& b = a;
0040145F 8D 45 FC lea eax,[ebp-4]
00401462 89 45 F8 mov dword ptr [ebp-8],eax
#include <iostream>
using namespace std;
int main()
{
int a = 3;
int& ra = a;
const int& rb = 3;
int c = a;
c = ra;
c = rb;
return 0;
}
globl main
.type main,@function
main:
.LFB1479:
pushl %ebp
.LCFI0:
movl %esp, %ebp ;以经过此命令后的ebp作为base
.LCFI1:
subl $24, %esp
.LCFI2:
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $3, -4(%ebp) ;这是int a = 3;这句,a在-4(base)的位置上(空间上)
leal -4(%ebp), %eax ;取a的地址
movl %eax, -8(%ebp) ;这是int& ra = a;ra在-8(base)
movl $3, -12(%ebp) ;把一个常量3放置于-12(base)
leal -12(%ebp), %eax ;取3的地址
movl %eax, -16(%ebp) ;这是const int& rb = 3;rb在-16(base)
movl -4(%ebp), %eax
movl %eax, -20(%ebp) ;int c = a;c在-20(base)
movl -8(%ebp), %eax ;取ra的值,一个地址
movl (%eax), %eax ;透过这个地址去取值
movl %eax, -20(%ebp) ;c = ra;
movl -16(%ebp), %eax ;同ra
movl (%eax), %eax
movl %eax, -20(%ebp) ;c = rb;
movl $0, %eax
leave
ret