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

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

作者: 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