Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我浏览了各种实现的源代码,setjmp并longjmp注意到并非所有 CPU 寄存器都保存在jmp_buf结构中。查看 AMD64 ABI 后,我注意到只保存了被调用者保存的寄存器。
setjmp
longjmp
jmp_buf
我不明白仅保存一些寄存器时如何完全恢复功能状态。当然,在我稍后打电话之前,未保存的寄存器肯定已经被多次破坏了longjmp?
然而,一切都很完美,所以肯定有一些我不明白的地方。我希望有人可以对此有所了解。
谢谢!
该setjmp函数与任何其他函数一样,因此可以假定它破坏了任何调用者保存的寄存器。因此,它不需要保存/恢复这些寄存器。