函数传值方式返回对象的实现
2019-07-24 本文已影响0人
loki528
image.png
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*的方式返回的话,函数原型不变。