gpt4 book ai didi

c++ - 不引发异常时的性能 (C++)

转载 作者:IT老高 更新时间:2023-10-28 23:15:23 27 4
gpt4 key购买 nike

我已经阅读了很多关于 C++ 异常的内容以及我所看到的,特别是异常性能是一个很难的话题。我什至试图深入了解 g++ 的底层,看看异常在汇编中是如何表示的。

我是一名 C 程序员,因为我更喜欢低级语言。前段时间我决定使用 C++ 而不是 C,因为它可以让我的生活更轻松(类而不是结构、模板等)。

回到我的问题,因为我看到异常确实会产生开销只有在发生时才会萌芽,因为它需要一长串的跳转和比较指令才能找到适当的异常处理程序。在正常的程序执行中(没有错误)异常开销等于正常的返回码检查。我说的对吗?

最佳答案

请查看我对类似问题的详细回复 here .

异常处理开销因平台而异,取决于操作系统、编译器和运行的 CPU 架构。

对于 Visual Studio、Windows 和 x86,即使不引发异常也会产生成本。编译器生成额外的代码来跟踪当前的“作用域”,该作用域稍后用于确定要调用哪些析构函数以及从哪里开始搜索异常过滤器和处理程序。范围更改由 try block 和使用析构函数创建对象触发。

对于 Visual Studio、Windows 和 x86-64,当不引发异常时,成本基本上为零。 x86-64 ABI 具有比 x86 更严格的异常处理协议(protocol),并且操作系统做了很多繁重的工作,因此程序本身不需要跟踪太多信息来处理异常。

当异常发生时,成本很高,这就是为什么它们应该只在真正异常的情况下发生。在 x86-64 上处理异常比在 x86 上更昂贵,因为该架构针对不发生异常的更常见情况进行了优化。

关于c++ - 不引发异常时的性能 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744984/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com