C++ 性能优化:局部缓冲区优化与作用域守卫模式解析
1. 局部缓冲区优化
局部缓冲区优化是一种旨在提升性能的设计模式,能显著减少重复或浪费的内存分配。它可应用于紧凑的数据结构,也能用于存储小型对象,如可调用对象。
1.1 类型擦除的开销
类型擦除的虚表(vtable)能在运行时重构存储在缓冲区中的类型,但存在一定开销。除了额外的数据成员 vtable_ ,间接函数调用也会产生运行时成本。通过对局部缓冲区的两种实现(有和没有类型擦除)进行测试,存储和复制一些可简单复制的对象,如捕获引用的 lambda 表达式,结果如下:
| 基准测试 | 时间 |
| — | — |
| BM_lambda_copy_trivial | 5.45 ns |
| BM_lambda_copy_typeerased | 4.02 ns |
虽然(实现良好的)类型擦除开销不可忽视,但相对较小。此外,它还能在运行时验证 as<T>() 调用是否引用有效类型,以及对象是否确实已构造。不过,与未检查方法的低成本实现相比,这会增加显著的开销,因此可能应仅限于调试版本。
1.2 局部缓冲区优化的缺点
- 内存浪费 :所有带有局部缓冲区的对象都比没有时更大。如果缓冲区中存储的典型数据小于所选的缓冲区大小,每个对象都会浪费一些内存。更糟糕的是,如果缓冲区大小选择不当,大多数数据实际上比局部缓冲区大,数据将远程存储,但每个对象内部仍会创建局部缓冲区,导致所有这些内存都被浪费。 <
超级会员免费看
订阅专栏 解锁全文
8275

被折叠的 条评论
为什么被折叠?



