有没有办法在c ++中使用异常,并不会花费额外的二进制大小60k?

Ken*_*lor 9 c++ compiler-construction embedded exception-handling

我正在使用嵌入式平台,我不习惯在我的二​​进制文件中添加60k.无论如何,有一些论据可以避免嵌入式系统的异常,但我认为它们中的大多数是虚假的.例外是有道理的,但我无法证明其成本是合理的.我正在使用gcc 4.6.3,也许我错过了一个选项,或者这可能只是异常的开销.我已经尝试过-Os,并将例外更改为longjmp,但无济于事.我可能错过了什么.

感谢您的任何见解.

πάν*_*ῥεῖ 2

一开始,不!

异常处理需要一些成本,主要是需要 RTTI 支持,恕我直言(到目前为止还没有通过实验证明这一点)。RTTI 支持将导致代码文本段的使用产生一些费用,特别是如果有大量模板实例化(例如,广泛使用具有多种不同类型的 STL 模板类/容器类)。

另一方面,与其他减少例如 newlib 所需实现的可能性相比,60k 开销的成本并不算多。

你真的应该三思而后行,放弃异常支持!

有趣的是,今天我和同事讨论了这个话题,当时我们面临着一个显然是由内存不足情况引起的错误。有问题的固件(及其与 FreeRTOS 的操作系统绑定)不支持异常,但如果您无法使用new(). 使用某些 STL 引发的算法可能会发生这种情况,并且您没有机会使用try/catch失败时的块来拦截这种情况(例如使用简单的std::vector)。

因此,您应该决定如何处理错误情况,是否使用异常,并确保提供一致的行为,例如使用常见的 STL 模式等,并权衡为.text部分大小支付的成本。