C++中支持使用try-catch的语法处理异常,防止程序崩溃。那么编译器是如何实现的呢?
有如下测试代码:
int main(int argc,char** argv){
try{
throw "error";
}
catch (char* err){
err = nullptr;
}
return 0;
}
这里直接在try中抛出异常,程序捕获这个异常将错误信息传给err,为了使catch块不被编译器忽略,这里随便附一个值,顺便看看这个nullptr是什么。
编译出的汇编代码如下:
int main(int argc,char** argv){
//ebp用于定位函数局部变量,先保存ebp,然后移动到栈顶
00A91410 push ebp
00A91411 mov ebp,esp
//数0xFFFFFFFF和地址0A94EF0压栈,这个其实是一个函数的地