【问题标题】:How C++ exception implemented (using Setjump() & Longjump() ?) [duplicate]如何实现 C++ 异常(使用 Setjmp() 和 Long Jump() ?)[重复]
【发布时间】:2011-09-05 23:46:14
【问题描述】:

可能的重复:
How is the C++ exception handling runtime implemented?
How do exceptions work (behind the scenes) in c++

亲爱的,

我想知道,C++异常是如何实现的?

它实际上是否像在构建中那样使用 Setjump() 和 Longjump() 概念?

【问题讨论】:

标签: c++ exception


【解决方案1】:

该标准没有定义编译器供应商必须如何实现异常。两种主要策略是跟踪表中的捕获位置或展开堆栈帧直到找到合适的捕获位置。

例如,MSVC 使用 SEH(结构化异常处理程序)来实现 C++ 异常,而 GCC 使用纯地址表方法。其他编译器仍然可以使用堆栈展开,如果它们保留了足够的帧信息。

【讨论】:

  • MSVC 出于历史原因在 32 位 Windows 中使用 SEH。 64 位版本使用表格方法。
【解决方案2】:

您应该检查第 15.1 节抛出标准异常。

【讨论】:

  • @osdevkid:不可能提供标准的链接。 ISO 会为此收费。
  • 您可以查看每个标准的最新草案,这些草案与 ISO 的最终文件相同:open-std.org/jtc1/sc22/wg21
猜你喜欢
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 2012-10-07
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多