汇编代码供参考

时间:2017-01-03 17:45:19

标签: c++ assembly

我还没有深入理解c ++中的引用类型。所以我写了一小段代码:

int a = 10;
int& b = a;

cout << "a: " << a << endl;
cout << "b: " << b << endl;

cout << "&a: " << &a << endl;
cout << "&b: " << &b << endl;

输出是:

a: 10
b: 10
&a: 0x7ffebd76ac6c
&b: 0x7ffebd76ac6c

我毫不奇怪地注意到a和b的地址是一样的。 然后我反汇编以找出编译器实际上是如何考虑引用的。代码如下:

 40096e:    c7 45 dc 0a 00 00 00    mov    DWORD PTR [rbp-0x24],0xa
 400975:    48 8d 45 dc             lea    rax,[rbp-0x24]
 400979:    48 89 45 e0             mov    QWORD PTR [rbp-0x20],rax

如果我是正确的,rbp-0x24指的是变量a,而rbp-0x20指的是变量b。但我怀疑的是:如果在这三行之后(如果我没有犯过错误的话)

[rbp-0x20] = rbp-0x24

两个变量的地址怎么可能相同?

0 个答案:

没有答案