gpt4 book ai didi

c++ - 保存并复制 jmp_buf C++

转载 作者:太空狗 更新时间:2023-10-29 21:39:32 28 4
gpt4 key购买 nike

制作 jmp_buf 的拷贝并在以后恢复它是否可能并且有效?像

jmp_buf oldEnv = env;
int val = setjmp(env);
.......
env = oldEnv;

我已经使用 memcopy() 和 sizeof(env) 来复制 jmp_buf 数据。这似乎工作正常。这只是巧合吗?

最佳答案

只有当您不对 jmp_buf 做任何事情时,您才能这样做在过渡期。最值得注意的是,您不能调用 setjmp再次,恢复旧的jmp_buf内容,并使用 longjmp回到更早的setjmp打电话。

C标准中的规则:

The longjmp function restores the environment saved by the most recent invocation of the setjmp macro in the same invocation of the program with the corresponding jmp_buf argument.

因为 jmp_buf是“数组类型”,对 longjmp 的调用实际上是传递一个衰减的指针;这是jmp_buf的实际地址上述关于“相应的 jmp_buf 论点”的措辞引用,而不仅仅是其内容。

我不知道标准如何保证您将返回到最近的 setbuf 的上下文, 如果你一直在处理 jmp_buf 的内容, 所以我会对待 jmp_buf 的任何修改使其完全无法用于 longjmp目的。

如果您对特定平台的内部布局有所了解,并且您正在使用 jmp_buf将处理器上下文保存到调试日志中,这样的事情很好。但拷贝不能与 longjmp 一起使用.

关于c++ - 保存并复制 jmp_buf C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32752204/

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