当需要返回的值为局部变量的时候 :
例如 :
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 返回指针或者引用就可以了。