29、C++ 性能优化:局部缓冲区优化与作用域守卫模式解析

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 局部缓冲区优化的缺点
  • 内存浪费 :所有带有局部缓冲区的对象都比没有时更大。如果缓冲区中存储的典型数据小于所选的缓冲区大小,每个对象都会浪费一些内存。更糟糕的是,如果缓冲区大小选择不当,大多数数据实际上比局部缓冲区大,数据将远程存储,但每个对象内部仍会创建局部缓冲区,导致所有这些内存都被浪费。
  • <
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值