看了Thinking c++第10章的传值方式传递和返回这一节。不是很明白。
午休的时候。写了一个例子,反编译了看看。
#include <stdio.h>
class A
{
public:
int i;
int ii;
int iii;
};
void fun1(A a){
a.i++;
}
int main(int argc, char *argv[])
{
printf("start...\n");
A a;
a.i = 1;
a.ii = 2;
a.iii = 3;
fun1(a);
printf("end...\n");
return 0;
}
mov dword ptr ss:[ebp-C], 1 ;i
mov dword ptr ss:[ebp-8], 2 ;ii
mov dword ptr ss:[ebp-4], 3 ;iii
sub esp, 0C
mov eax, esp
mov ecx, dword ptr ss:[ebp-C]
mov dword ptr ds:[eax], ecx
mov edx, dword ptr ss:[ebp-8]
mov dword ptr ds:[eax+4], edx
mov ecx, dword ptr ss:[ebp-4]
mov dword ptr ds:[eax+8], ecx
call 00401000 ;fun1的地址
看了上面的汇编代码,基本都明白了。
把对象A的成员变量按着定义的顺序一个一个的COPY到栈中。