我看过很多文章和问题,所有这些都集中在异常成本、性能基准等等。
但似乎没有什么能真正解释为什么它这么慢。引擎盖下真正发生了什么,因此当一个人被抛出时,它的幅度会变慢。大多数文章只是说堆栈展开是让它变慢的原因。但我不明白为什么这会使其速度变慢。
从对 SEH 的简要了解来看,基本上每次线程进入 try 块时,它都会在其 TIB 中的异常链上添加某种标记到该位置。这有其成本,同时试图退回堆栈。我理解那部分。但考虑到性能损失的严重性,我怀疑这甚至是故事的一半。另外,如果异常在同一个函数中被捕获,为什么还要展开堆栈。为什么这种情况仍然同样缓慢?
有人可以简单地解释一下到底发生了什么吗?