setjmp和longjmp感想

#include <setjmp.h>

int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val); 

setjmp()设置跳转点,参数env用于保存运行环境(估计主要是寄存器值);

setjmp()本身返回时,返回值为0,若是从longjmp()返回,longjmp()的参数val就是setjmp()的返回值;

longjmp()跳转到参数env所设置的跳转点,参数val为setjmp()的返回值;

由于setjmp()保存了寄存器值,所以保存在寄存器里的变量在从longjmp()返回后,会被恢复为保存时的值。这种情况多见于进行了程序优化的代码,将auto、register变量保存在寄存器里面。而global、static、volatile变量不会被恢复(也即无论怎么优化,这三类变量也不会保存到寄存器里);

转载于:https://my.oschina.net/everkimage/blog/2870287

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值