【发布时间】:2011-11-01 15:52:28
【问题描述】:
我在调查setjmp/longjmp,发现setjmp保存了指令指针、堆栈指针等寄存器...
但是我在这里不明白的是,线程本身堆栈中的数据不能在调用 setjmp 和 longjmp 之间进行修改。在这种情况下,longjmp 不会按预期工作。
为了说清楚,例如当longjmp恢复堆栈指针时,假设堆栈指针现在指向的内存中的数据与setjmp时不一样strong> 被调用。这会发生吗?如果发生这种情况,我们不是有麻烦吗?
还有这句话的意思,“在调用 setjmp() 例程的例程返回后,不能调用 longjmp() 例程。”
【问题讨论】:
-
很像“分配局部变量的例程返回后,不能使用局部变量”。调用
setjmp()时处于作用域内的堆栈变量在调用longjmp()时必须仍在作用域内。