当需要返回的值为局部变量的时候 :
例如 :
class test{
public :
int a;
double b;
int arr[200];
};
// Type your code here, or load an example.
test square() {
test t;
return t;
}
int main (){
test t = square();
return 0;
}
反汇编结果 :
square():
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-8], rdi
nop
mov rax, QWORD PTR [rbp-8]
pop rbp
ret
main:
push rbp
mov rbp, rsp
sub rsp, 816
lea rax, [rbp-816]
mov rdi, rax
call square()
mov eax, 0
leave
ret
可以看到,如若是栈内存通过 rdi 将接受返回值的 那块内存的指针 传入到函数,然后直接修改那块内存。在这里也就是 rbp - 816 那块内存。
如若是堆内存,则只需要根据 eax 返回指针或者引用就可以了。