C 语言中 setjmp 和 longjmp( 二 )
voidf()
{
//...
Label:
//...
voidg()
{
//...
GOTOLabel;
//...
首先我们要知道 , 实现这种类型的跳转 , 和操作系统中任务切换的上下文切换有点类似 , 我们只需要恢复 Label 标签处函数上下文即可 。 函数的上下文包括以下内容:
函数栈帧 , 主要是栈帧指针BP和栈顶指针SP
程序指针PC , 此处为指向 Label 语句的地址
其它寄存器 , 这是和体系相关的 , 在 x86 体系下需要保存有的 AX/BX/CX 等等 callee-regs 。
这样 , 在执行GOTO Label;这条语句 , 我们恢复 Label 处的上下文 , 即完成跳转到 Label 处的功能 。
推荐阅读
- msi|DK碾压C9拿到MSI首胜,但却暴露了一个问题,姿态赛前一言中的!
- 5G|美方刚换了5G新策略,中国移动就宣布大消息,任正非言中了
- 美国突然宣布,弱点终被暴露,任正非早就言中!
- 是哗众取宠还是泄露天机?美国最知名算命婆,临终前这般预言中国
- C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解
- 为什么C语言中的字符串可以用指针表示?
- 王思聪言中?美股上市不到半年股价腰斩,如涵控股或遭投资者集体诉讼
- 在爱因斯坦众多预言中,还曾预言了中国,如今已应验证明他的远见
- 语特欧亚全语言中心在苏州正式起航
- 玛雅文明的5个预言中,有4个已应验,为何唯独2012错了?