函数传值方式返回对象的实现

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*的方式返回的话,函数原型不变。

上一篇下一篇

猜你喜欢

热点阅读