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 页请下载阅读 -
文档评分