美文网首页
函数传值方式返回对象的实现

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

作者: loki528 | 来源:发表于2019-07-24 17:11 被阅读0次
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*的方式返回的话,函数原型不变。

相关文章

网友评论

      本文标题:函数传值方式返回对象的实现

      本文链接:https://www.haomeiwen.com/subject/ssxalctx.html