为什么在切换上下文时Golang仅保存%rsp,%rip和%rbp(没有其他被调用者保存的寄存器?)>

问题描述 投票:1回答:1

在一般的用户线程上下文切换实现中(如setjmp/longjmpfunction return方式),我们保存和恢复被调用者保存的寄存器,但golang仅在以下位置保存和恢复%rsp%rip%rbpgobuf

以x86_64为例,golang用runtime.gosave保存goroutine上下文,并用runtime.gogo恢复goroutine上下文。

那么,为什么golang用这种方式呢?预先感谢您提供的任何帮助。

在一般的用户线程上下文切换实现中(如setjmp / longjmp和函数返回方式),我们保存并恢复被调用者保存的寄存器,但是golang仅保存并恢复%rsp,%rip和%rbp ...

go x86-64 goroutine calling-convention context-switch
1个回答
0
投票

显然,GoLang仍然使用效率低下的调用约定,其中唯一保留调用(又称为非易失性)的寄存器是RSP和RBP。

© www.soinside.com 2019 - 2024. All rights reserved.