Met*_*est 11 c linux x86 setjmp
我正在调查setjmp/longjmp,发现setjmp保存了诸如指令指针,堆栈指针等寄存器......
但是我不知道的是,在调用setjmp和longjmp之间,不能修改线程堆栈中的数据本身.在这种情况下,不会longjmp不能按预期工作.
为了说清楚,例如,当longjmp恢复堆栈指针时,说现在堆栈指针所指向的内存中的数据与调用setjmp时的数据不同.这会发生吗?如果发生这种情况,我们不是有麻烦吗?
另外,语句的意思是" 在调用setjmp()例程的例程返回后,可能不会调用longjmp()例程. "
setjmp()/longjmp()并不意味着保存堆栈,这setcontext()/getcontext()是为了什么.
该标准指定在调用和调用setjmp()之间更改的函数中定义的非易失性自动变量的值在a之后未指定.对于你如何称呼同样的原因也有一些限制.setjmp()longjmp()longjmp()setjmp()
堆栈指针标记堆栈的"已使用"和"未使用"部分之间的划分.当你调用时setjmp,所有当前的调用帧都在"used"端,并且setjmp在调用setjmp返回的函数之后发生的任何调用都会在保存的堆栈指针的"未使用"侧调用它们的调用帧.请注意,longjmp在调用setjmp返回的函数之后调用会调用未定义的行为,因此不需要考虑这种情况.
现在,一些现有的调用帧中的局部变量可能setjmp会被调用函数或通过指针修改,这就是为什么volatile在很多情况下需要使用它的一个原因......