我知道 setjmp 和 longjmp 的定义。 setjmp 将环境存储在堆栈上下文中,另一个恢复。
但我认为我的部分还存在一些缺乏理解的地方。有人可以在很好的例子的帮助下向我解释一下我如何保证、如何保存以及如何恢复吗?
我看到jmp_buf中有很多指向CPU的寄存器。但我如何确保它已恢复?
请帮助我用简洁的例子来解释。我用谷歌搜索并提到了其他有关堆栈溢出的问题,但没有一个给出明确的例子。
预先非常感谢。
P.S:它应该仅来自 Linux/Unix 上下文。
打电话时longjmp()
,所有这些寄存器都会自动恢复,并在相应的调用处继续执行setjmp()
,但这一次setjmp()
有不同的返回值(类似于fork()
父级和子级有不同的返回值)。
setjmp()
/longjmp()
只保存有限的环境。特别是,它们只保存堆栈指针,而不是完整堆栈,因此您只能返回到同一函数或调用函数。 POSIX 有setcontext()
,它允许在堆栈之间切换,使其对于实现诸如用户空间线程(原纤维,绿色线程,...)之类的东西更加立即有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)