pdf文档 C++ Exceptions for Smaller Firmware

6.74 MB 237 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
文档讨论了C++异常在固件开发中的应用及其对二进制大小的影响。传统观点认为C++异常会增加二进制尺寸,导致固件开发者避免使用,但文档指出C++异常实际上可以通过优化代码生成、减少返回路径、压缩异常处理信息等方式实现更小的二进制文件。文档还列举了C++异常的特性,如运行时类型信息、异常表和帧展开等,并探讨了其在资源受限环境中的适用性。
AI总结
《C++ Exceptions for Smaller Firmware》摘要: 此文档探讨了C++异常在固件开发中的应用,分析了固件开发者为何通常避免使用C++异常,并探讨了如何通过异常实现更小的二进制尺寸。 ### 固件开发者避免C++异常的原因: 1. **资源消耗**:需要动态内存/堆,增加二进制大小,依赖C++ STL。 2. **运行时开销**:需要RTTI、异常表、异常代码,可能导致非确定性和慢性能。 3. **栈展开与内存使用**:框架评估、malloc使用和无界内存分配问题。 ### C++异常如何实现更小的二进制尺寸: 1. **减少代码生成**:调用容易出错的函数时,代码生成更少。 2. **展开信息优化**:展开信息规模取决于函数数量,而非调用数量。 3. **消除额外返回路径**:减少函数中的额外代码。 4. **压缩指令表示**:展开信息是正常指令的压缩形式。 5. **一次性付费**:只需一次支付异常机制代码的费用。 ### C++异常的本质: - C++异常是**代码压缩**的一种形式,通过减少重复代码和优化指令来节省空间。 ### 使用异常的陷阱: 1. **函数返回路径**:避免复杂的返回路径。 2. **无动态内存分配**:避免使用malloc等动态内存分配。 3. **避免展开$path陷阱**:注意栈展开的潜在问题。 4. **谨慎使用堆内存**:避免使用`std::shared_ptr`等可能导致内存无界使用的功能。 ### 案例对比: 文档通过两段代码对比(使用`std::expected`和传统错误处理)展示了异常处理在`size`参数下的优化效果,证明C++异常可以为固件开发带来更小的二进制尺寸。 ### 结论: - C++异常在固件开发中是可行的,并且可以通过合理使用减少二进制大小。 - 需要注意避免动态内存分配、栈展开和其他潜在问题。 ### 作者信息: - **Khalil Estell (@kammce)**:旧金山州立大学(SJSU)毕业,前谷歌员工,SJSU志愿者,ISO C++委员会成员。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 225 页请下载阅读 -
文档评分
请文明评论,理性发言.