当没有抛出异常时,C++ 异常会以哪些方式减慢代码速度?

2023-12-14

我读到,使用 C++ 异常进行异常处理(而不是检查返回值)会产生一些开销。我只是谈论没有抛出异常时产生的开销。我还假设您需要实现实际检查返回值并执行适当操作的代码,无论什么都相当于 catch 块将执行的操作。而且,将抛出内部有 45 个状态变量的异常对象的代码与为每个错误返回负整数的代码进行比较也是不公平的。

我并不是试图仅仅根据哪个可能执行得更快来建立支持或反对 C++ 异常的案例。我听说最近有人提出这样的情况:一旦考虑到检查返回值和处理错误所需的所有额外簿记代码,使用异常的代码应该与基于返回代码的代码运行得一样快。我缺少什么?


与异常处理相关的成本some平台和some编译器。

也就是说,Visual Studio 在构建 32 位目标时,将在每个具有非平凡析构函数的局部变量的函数中注册一个处理程序。基本上,它设置了一个try/finally处理程序。

另一种技术采用的是gcc和针对 64 位的 Visual Studio,仅在出现异常时才会产生开销thrown(该技术涉及遍历调用堆栈和表查找)。在很少抛出异常的情况下,这实际上可以产生更高效的代码,因为不需要处理错误代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当没有抛出异常时,C++ 异常会以哪些方式减慢代码速度? 的相关文章

随机推荐

  • 我是否总是必须在 -viewDidLoad 方法中调用 [super viewDidLoad] ?

    在Apple的scrollView示例中 他们没有这样称呼 我一直以为那是一个must 无论如何我为什么要这么称呼呢 如果您要重写该方法 您仍然应该在 super 中调用该方法 即使超类今天没有使用它做任何事情 Apple 也可能有一天会更
  • 嵌套权重对我的 XML 代码的性能不利[重复]

    这个问题在这里已经有答案了 我想显示一个有组织的网格 所以我使用 LinearLayout 和 Layout Weight 选项 一切都很完美 但我不明白如何避免按钮 A 和按钮 C 中的此警告 Nested weights are bad
  • 为什么 `go test -run NotExist` 通过了?

    如果我运行以下命令 go test run NotExist 响应为 通过 鉴于我的测试文件不包含名为的测试TestNotExist我希望上面的命令返回 FAIL 如果没有 run option go test运行所有测试 您使用 run选
  • geom_abline(...) 是否多次绘制数据?

    是否使用geom abline 也geom vline and geom hline 导致 天真 使用时同一行多次过度绘制 例如 假设我们对以下多面散点图感兴趣 library ggplot2 library dplyr k lt 4 da
  • java使用BODMAS吗?

    目前 我正在尝试使用java编程语言制作一个计算器 但是 我需要知道java是否使用BODMAS 以便我知道是否制作一个实现BODMAS的算法或继续制作计算器 java使用BODMAS吗 这是 BODMAS 而不是 BOMDAS 除法在乘法
  • 文档图像二值化[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试寻找有效的文档图像二值化技术 我目前已经实现了 niblack 和 sauvo
  • 在 ASP.NET MVC 中构建自定义授权

    In the DB i have Role and User具有一对多关系的实体 我想做的是构建自定义授权过滤器 我见过的所有教程都是使用默认的ASP NET会员资格 我只知道我需要继承AuthorizationAttribute但不知道我
  • 如何使用 React Router v6 导航到上一页,同时将当前页面的状态传递给它?

    我知道我可以使用navigate 1 来自useNavigate 钩子 导航到上一页 但使用navigate 1 state state 似乎不起作用 因为当我转到上一页时我得到一个空值 The navigate函数有两个函数签名 一个需要
  • 在 PHP 中通过正确的身份验证确保安全登录

    如何在 PHP 中编写 组合安全登录 这网站开发者指南说我不应该自己动手 所以参考通过谷歌提供的示例是没有用的 高手们是如何做到的呢 假设您正在 Rails 中构建一个世界级的应用程序 相同的库 技术可以在这里使用吗 Thanks 在 Ra
  • 无法连接到 StreamSocketListener

    我正在尝试连接到 Windows 10 应用程序中的 StreamSocketListener 如果客户端套接字位于同一应用程序内 则此方法有效 但如果我尝试从另一个应用程序 例如 Putty 连接 它就不起作用 几秒钟后 腻子显示 网络错
  • 在java中使用super.paintComponent(g)或getGraphics()

    我对几件事有点困惑 示例代码 显示了我的问题 这是不可编译的 image private BufferedImage image private Graphics2D graphic private changeImage thread l
  • 有没有办法调用被重写的对象的基类方法? (C++)

    我知道有些语言允许这样做 在C 中可以吗 Yes include
  • 围绕角色旋转图像(JAVA)

    是的 我确实知道您可以使用 AffineTransformation 但是我希望我的剑图像围绕我制作的角色 图形中绘制的黑色块 明显旋转 360 度 而不是仅旋转一圈 基本上我想要一个像泰拉瑞亚那样的旋转系统 我知道如何获取角色的 x 和
  • 返回类型不同的方法的类型擦除

    我想知道是否存在某种形式的类型擦除来处理具有相同名称和参数但返回不同值的方法 如下面的示例所示 begin and end 我并不打算在任何地方实际使用它 我只是想知道它是否可能 如果可能的话 将如何完成 我所知道的类型擦除的唯一形式是拥有
  • HTML 和字符编码与 HTML 实体

    在编写 HTML 文档时 是否可以使用直接的特殊字符 例如大写字母 C 下面有一个变音符 作为常规文本 或使用HTML 实体名称这个角色的 Ccedil 我已经看到这两种方法都在实践中被使用 但肯定有一些规则来管理它的适当使用 以及一种方法
  • 如何获取 ul 标签中特定 li 的位置?

    我想要获得一号li我悬停在上面jQuery 这是我的代码 ul li li li li li li I want hover on this element li li li li ul 我希望当鼠标悬停在顶部代码中的某些元素上时获取所有元
  • 使用索引列表访问 pandas 数据框中的条目

    我面临的问题是 我只需要分布在不同行和列上的原始数据帧的子集 例如 My Original dataframe import pandas as pd dfTest pd DataFrame 1 2 3 4 5 6 7 8 9 Output
  • WSL - 当 linux 二进制文件在 Bash 中不可用时如何回退到 exe

    我需要做的是编写既可以在常规 Unix 系统上工作 也可以在 WSL 上工作的脚本 并在 linux 系统未安装 未安装在 PATH 中时尝试使用 EXE 版本的命令 这是我正在使用的当前代码 但我想知道是否可以使用更简单 更简洁的方法 i
  • cudaMemcpy 到主机来获取设备分配的内存仍然不可能吗?

    我有一个带有指针的数据结构 想想链表 在启动读取输入数据的内核之前无法确定其大小 因此 我在输入处理期间在设备上分配数据 但是 尝试将该数据复制回主机失败 据我所知 这是因为 CUDA 存在限制 不允许运行时 API 访问设备分配的内存 然
  • 当没有抛出异常时,C++ 异常会以哪些方式减慢代码速度?

    我读到 使用 C 异常进行异常处理 而不是检查返回值 会产生一些开销 我只是谈论没有抛出异常时产生的开销 我还假设您需要实现实际检查返回值并执行适当操作的代码 无论什么都相当于 catch 块将执行的操作 而且 将抛出内部有 45 个状态变