kin*_*er1 7 unix linux longjmp setjmp
我知道setjmp和longjmp的定义.setjmp将环境存储在堆栈上下文中,另一个恢复.
但我认为我的某些方面缺乏某种理解.有人可以借助好的例子来解释我,我如何保证,如何保存以及如何恢复它?
我看到jmp_buf中有很多CPU寄存器.但我怎么保证它恢复了?
请帮我用简洁的例子来解释.我用谷歌搜索并提到堆栈溢出的其他问题,但没有一个给出明确的例子.
非常感谢提前.
PS:它应该仅来自Linux/Unix上下文.
nin*_*alj 7
调用时longjmp(),所有这些寄存器都会自动恢复,并在相应的调用中继续执行setjmp(),但这次setjmp()返回值不同(类似于fork()父节点和子节点的返回值不同).
longjmp()
setjmp()
fork()
setjmp()/ longjmp()只保存有限的环境.特别是,它们只保存堆栈指针,而不是完整堆栈,因此您只能返回相同的函数或调用函数.POSIX具有setcontext()允许在堆栈之间切换的功能,使其更加直接用于实现用户空间线程(原纤维,绿线程......等).
setcontext()
归档时间:
14 年,4 月 前
查看次数:
6240 次
最近记录:
12 年,4 月 前