gpt4 book ai didi

c++ - C++ 异常处理增加了多少占用空间

转载 作者:IT老高 更新时间:2023-10-28 13:58:56 24 4
gpt4 key购买 nike

这个问题对于嵌入式开发尤其重要。异常处理为生成的二进制输出增加了一些足迹。另一方面,无一异常(exception)地需要以其他方式处理错误,这需要额外的代码,最终也会增加二进制文件的大小。

我对你的经历很感兴趣,尤其是:

  1. 编译器为异常处理添加的平均占用空间是多少(如果您有此类测量结果)?
  2. 就二进制输出大小而言,异常处理真的比其他错误处理策略更昂贵(很多人这么说)吗?
  3. 对于嵌入式开发,您会建议什么错误处理策略?

请仅将我的问题作为指导。欢迎任何意见。

附录:是否有人有具体的方法/脚本/工具,对于特定的 C++ 对象/可执行文件,将显示编译器生成的专用于异常处理的代码和数据结构占用的已加载内存占用的百分比?

最佳答案

当一个异常发生时会有时间开销,这取决于你如何实现你的异常处理。但是,作为轶事,应该导致异常的事件的严重性将花费同样多的时间来使用任何其他方法来处理。为什么不使用高度支持的基于语言的方法来处理此类问题?

GNU C++ 编译器默认使用零成本模型,即在不发生异常时没有时间开销。

Since information about exception-handling code and the offsets of local objects can be computed once at compile time, such information can be kept in a single place associated with each function, but not in each ARI. You essentially remove exception overhead from each ARI and thus avoid the extra time to push them onto the stack. This approach is called the zero-cost model of exception handling, and the optimized storage mentioned earlier is known as the shadow stack. - Bruce Eckel, Thinking in C++ Volume 2

尺寸复杂性开销不易量化,但 Eckel 指出平均为 5% 和 15%。这将取决于您的异常处理代码的大小与应用程序代码的大小之比。如果您的程序很小,那么异常将是二进制文件的很大一部分。如果您使用的是零成本模型,那么异常将占用更多空间来消除时间开销,因此如果您关心空间而不是时间,则不要使用零成本编译。

我的观点是大多数嵌入式系统都有足够的内存,如果你的系统有一个 C++ 编译器,你就有足够的空间来包含异常。我的项目使用的 PC/104 计算机有几 GB 的辅助内存,512 MB 的主内存,因此对于异常没有空间问题 - 但是,我们的微 Controller 是用 C 编程的。我的启发是“如果有一个主流的 C++ 编译器它,使用异常,否则使用 C"。

关于c++ - C++ 异常处理增加了多少占用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/691168/

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