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()的返回值;code

longjmp()跳轉到參數env所設置的跳轉點,參數val爲setjmp()的返回值;class

因爲setjmp()保存了寄存器值,因此保存在寄存器裏的變量在從longjmp()返回後,會被恢復爲保存時的值。這種狀況多見於進行了程序優化的代碼,將auto、register變量保存在寄存器裏面。而global、static、volatile變量不會被恢復(也即不管怎麼優化,這三類變量也不會保存到寄存器裏);變量

相關文章
相關標籤/搜索