3进栈
1进栈
&value进栈
调用fun_value
esp += 12 //从栈上删除函数调用的三个参数,12个字节
//A的size大于4字节即可
A fun_value(int a, int c)
{
A r;
r.a = a + c;
return r;
}
相当于是把函数转换为
void fun_value(A* ret, int a, int c)
{
A r;
A::A(&r);
r.a = a + c;
ret->A::A(&r);
}
如果返回值的size小于地址宽度的话,函数通过eax寄存器返回值。
所以A的size要大于4.
如果通过A*的方式返回的话,函数原型不变。
网友评论