如何解决当通过引用传递局部变量时,c ++如何处理局部变量的内存?
我想我获得了功能-将引用传递给函数会传递地址,因此对下面a_val
中的b_val
和get_point
的修改会更改{{ 1}}。
我不知道这是如何实现的-值是否移到堆空间并将其地址传递到calling_func
中?还是可以将get_point
堆栈帧中的地址传递到calling_func
并在那里进行修改?
get_point
解决方法
Or can addresses from the calling_func stack frame be passed into get_point and modified there?
- 完全正确;调用时,每个函数的堆栈向下增长,并且调用被调用方时,上面的调用方堆栈空间仍然有效。通常,这是通过使用
lea
指令将指针传递到参数将传递到的位置来实现的:
lea rcx,[rsp + offset to a]
lea rdx,[rsp + offset to b]
call get_point
在get_point
内,将rcx和rdx(假定为win64调用约定)取消引用并移入xmm寄存器中,以便将这些变量作为浮点数进行操作。例如,可以使用movss
:
movss xmm0,[rcx] // this is where the actual dereferencing of the references in question happens
movss xmm1,[rdx]
此外,如果您想查看由编译器生成的实际程序集,建议您使用Compiler Explorer(https://godbolt.org/)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。