浅谈C++ 异常处理的语义和性能
作者:网络转载 发布时间:[ 2014/9/11 11:05:03 ] 推荐标签:软件开发 C++ 异常处理
异常处理是个十分深奥的主题,这里只是浅论其对C++性能的影响。
在VC++中,有多个异常处理模式,三个重要:
No exception handling (无异常处理)
C++ only (C++语言异常处理)
C++ 加SEH (C++语言加windows 结构异常处理机制)
异常处理每增加一个级别,都要付出时空上的代价。我们从下面简单的C++例子着手,分析异常处理的原理及其性能:
// simple class
class MyAppObject
{
public:
MyAppObject(int id) : _myID(id) {}
~MyAppObject();
int _myID;
void DoSomething(int throwWhat) ;
};
// can throw 2 different exception
void MyAppObject::DoSomething(int throwWhat)
{
printf("MyAppObject::DoSomething called for '%d'
", _myID);
switch (throwWhat)
{
case 0:
break;
case 1:
this->_myID /= 0; // exception 1
break;
case 2:
throw SimpleString("error!"); // exception 2
break;
}
}
// Test exception for the above class
void TestMyAppObject()
{
printf("before try”);
try // line1
{
printf("in try”);
MyAppObject so = 1; // line2
SimpleString ss("test ex point one"); // line3
so.DoSomething(1); // line4
printf("so::ID called for '%d'
", so._myID);
MyAppObject so2 = 2; // line5
printf("so2::ID called for '%d'
", so2._myID);
so2.DoSomething(0); // line6
}
catch(const SimpleString &e) // line7
{
//printf("something happened: %s
", e);
}
catch(...) //line8
{
//printf("something happened: %s
", "SEH");
}
}
第一步,我们先选择“no exception”,并将上面line1,line7,line8注释掉。代码的size是:
Exe
Obj
32,256 bytes
20,931 bytes
然而因为line4引入一个“除0”异常,我们的程序非正常地停止了工作。这并非什么大的灾难。但是如果这是关键的服务器程序,这样的结果肯定不能为客户接受。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11