我正在浏览各种setjmp
的来源和 longjmp
实现并注意到并非所有 CPU 寄存器都保存在 jmp_buf
中。结构体。查看 AMD64 ABI 后,我注意到只保存了被调用者保存的寄存器。
我不明白仅保存一些寄存器时如何完全恢复功能状态。当然,在我调用 longjmp
之前,未保存的寄存器肯定已经被多次破坏了。稍后的?
然而,一切都很完美,所以肯定有一些我不明白的地方。我希望有人可以对此有所了解。
谢谢!
最佳答案
setjmp
function 是一个和其他任何函数一样的函数,因此可以假设它破坏了任何调用者保存的寄存器。因此,它不需要保存/恢复这些寄存器。
关于x86-64 - 为什么 setjmp(3) 不保存 AMD64 上的所有寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285365/