7

我浏览了各种实现的源代码,setjmplongjmp注意到并非所有 CPU 寄存器都保存在jmp_buf结构中。查看 AMD64 ABI 后,我注意到只保存了被调用者保存的寄存器。

我不明白仅保存一些寄存器时如何完全恢复功能状态。当然,在我稍后打电话之前,未保存的寄存器肯定已经被多次破坏了longjmp

然而,一切都很完美,所以肯定有一些我不明白的地方。我希望有人可以对此有所了解。

谢谢!

4

1 回答 1

6

setjmp函数与任何其他函数一样,因此可以假定它破坏了任何调用者保存的寄存器。因此,它不需要保存/恢复这些寄存器。

于 2012-07-01T20:38:35.373 回答