C++返回值与异常性能

Any*_*orn 5 c++ performance exception

某处我已阅读,现代的Intel处理器具有低级别的硬件实现异常和大多数编译器利用它,到例外变得比使用返回变量结果状态较快的影响.

这是真的吗?就返回状态/响应状态而言,是否比变量更快?读取堆栈溢出的话题似乎与此相矛盾.

谢谢

Owe*_* S. 14

请注意,术语"异常处理程序"存在歧义.我相信你会在谈论异常时发现硬件人员意味着:

  1. 硬件中断,又称信号,其处理程序有时称为异常处理程序(请参阅http://pages.cs.wisc.edu/~smoler/x86text/lect.notes/interrupts.html)
  2. 机器检查异常,如果硬件出现问题则停止计算机(请参阅http://en.wikipedia.org/wiki/Machine_Check_Exception)

这些都与C++的异常处理工具无关.

作为一个反例,我至少有一个轶事数据点,其中异常比返回代码慢:这在英特尔硬件上是正常的,但是使用gcc 2.95和一组非常大的异常表代码,构建了第一次抛出异常.随后的例外很快,但到那时通常会造成损害.不可否认,gcc 2.95非常古老,但它应该足以提醒您对C++异常处理的速度进行概括,即使在英特尔硬件上也是如此.


rlb*_*ond 11

我不知道你在哪里读到这个,但肯定是不正确的.没有任何硬件设计师可以使特殊情况(根据定义不常见)比正常情况更快.还要记住,根据TIOBE最流行的系统语言,C甚至不支持异常.对于一种语言的异常处理来说,处理器的优化似乎非常不可能,因为它们的实现在编译器中甚至没有标准化.

即使异常更快,你仍然不应该在预期目的之外使用它们,以免你在世界上混淆其他所有程序员.