1
27
我不能谈论D或它的编译器,但我可以告诉你一些C++、Windows和VisualStudio编译器。这可能有助于你大致了解D是如何做事的。 首先,32位和64位机器上的异常处理是不同的。x86abi(prolog/epilog,unwinding,calling约定)更松散,因此编译器和程序本身必须做更多的工作。x86-64 ABI更为严格,操作系统发挥了更大的作用,使程序本身更容易处理异常。如果你在Windows上运行D,那么它很可能使用 SEH (结构化异常处理),如C++。 同样,下面的所有答案都涉及Windows、C++和VisualStudio。
x86:即使没有抛出异常,也要付出代价。异常处理信息被推送到TIB(线程信息块)中,比如初始作用域和特定于函数的异常处理程序。为了知道要销毁哪些对象以及要搜索哪些处理程序,需要维护一个scope变量。此范围变量将在您输入时更新
例外情况应该是例外 . 不要将其用于常规控制流。只能用它们来表示真正特殊的、意外的事件。基本上,您不必担心异常的代价。即使他们花了2秒钟,你也不应该在意,因为他们应该只发生在一切都南下的时候。
重点:
|
2
6
在linux上,我相信它使用了GCC使用的异常表机制。在其他平台上,我不知道。 从性能方面来说,它可能与C++完全相同(或者至少非常接近)。 |
Divyat · D语言的BNF语法形式[闭口] 6 年前 |
hiropon · 有没有办法用Dlang同时分配多个变量? 7 年前 |
Jonathan Wilbur · 从D中的抽象类运行单元测试? 7 年前 |
thinwybk · 如何使用D访问linux字符设备? 7 年前 |
user3069488 · 震波。D-未定义标识符(Dlang) 7 年前 |
Dmitry Bubnenkov · 错误:实例化模板实例时出错 7 年前 |
Matt Smith · 正在转义对局部变量的引用 9 年前 |
StillLearningToCode · 将字符串解析为D中的标记 9 年前 |
Suliman · D?的TUI(文本用户界面)? 9 年前 |