在没有命中时,尝试C中的catch是否会影响性能
发布时间:2020-12-16 07:16:54 所属栏目:百科 来源:网络整理
导读:我有代码,其中函数中有try catch,函数被命中. 100次.代码每次都会提前返回,而不会实际触及try catch.这是否会影响Visual Studio的性能.我看到了性能影响. 我的代码是: void foo(int a) { if (a value) { return; } try { possibleErrorFunction(); } catch
我有代码,其中函数中有try catch,函数被命中. 100次.代码每次都会提前返回,而不会实际触及try catch.这是否会影响Visual Studio的性能.我看到了性能影响.
我的代码是: void foo(int a) { if (a > value) { return; } try { possibleErrorFunction(); } catch { } } 我改成了: void foo(int a) { if (a > value) { return; } bar(); } void bar() { try { possibleErrorFunction(); } catch { } } 第二个代码似乎快了大约10秒.对此有任何可以解释的解释吗? 解决方法
异常机制实现中使用了两个主要策略.一个是所谓的“基于帧”或“动态”,另一个是“基于表格”.其他方案是这两者的变体.你可以阅读更多关于他们
here
本质上,“基于帧”的动态实现确实在运行时将每个条目的资源花费在try块上和从try块中退出.如果不抛出异常但是它使用了更多的内存,那么“基于表”的机制不涉及任何额外的工作. 我不是100%肯定,但据我所知Microsoft编译直到VS2008使用“基于帧”的方法,并从VS2010开始实现“基于表”的方法. (也许有一些编译器开关可以控制它 – 我不知道,因为我个人不希望在现有代码或第三方库强制之前不使用异常).我想你可以在编译器文档中找到这些信息. 您还可以从c源生成汇编代码,以查看try块的运行情况 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 具体分析applicationContext.xml和spring3-servlet.xml
- XML解析乱码,UnmarshalException和 SAXParseException
- ruby-on-rails – Rails IPv6服务器
- 二分查找java代码
- ruby-on-rails – 安装Phusion Passenger的Amazon Linux堆栈
- generatorConfig.xml配置
- 在 React、Vue项目中使用SVG的方法
- c – 类型的编译时序
- c# – 如何创建具有相对宽度值的动态ColumnDefinitions?
- ruby – 手动更新Carrierwave Uploader安装的属性