gpt4 book ai didi

c - 关于 setjmp/longjmp

转载 作者:IT王子 更新时间:2023-10-28 23:59:35 26 4
gpt4 key购买 nike

我正在调查setjmp/longjmp,发现setjmp 保存指令指针、堆栈指针等寄存器...

然而,我在这里没有得到的是,在调用 setjmplongjmp 之间,不能修改线程本身堆栈中的数据。在那种情况下,longjmp 不会按预期工作。

说清楚,比如longjmp恢复栈指针的时候,说栈指针现在指向的内存中的数据和setjmp 被称为。这会发生吗?如果发生这种情况,我们不是有麻烦了吗?

还有语句的含义,“在调用 setjmp() 例程的例程返回后可能不会调用 longjmp() 例程。

最佳答案

堆栈指针标记了堆栈“已使用”和“未使用”部分之间的划分。当您调用 setjmp 时,所有当前调用帧都在“已使用”端,并且在 setjmp 之后但在调用 setjmp 的函数之前发生的任何调用 返回,将它们的调用帧放在保存的堆栈指针的“未使用”端。请注意,在调用 setjmp 的函数返回后调用 longjmp 会调用未定义的行为,因此无需考虑这种情况。

现在,在 setjmp 之后,调用函数或指针可能会修改某些现有调用帧中的局部变量,这就是必须使用 的原因之一>volatile 在许多情况下...

关于c - 关于 setjmp/longjmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7969075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com