小对象优化
c++核心原理
小对象优化采用空间换时间的策略,在容器对象内部预留一个固定大小的内部缓冲区,专门用于存储小对象数据。
以libstdc++ std::string为例, std::string通常需要动态分配内存来存储实际数据。对于大型对象,堆分配的开销相对于数据处理成本而言是可以接受的。但当频繁处理小对象时,情况就不同了:
- 分配器开销:每次调用new/delete或malloc/free都涉及复杂的内存管理算法,包括寻找合适大小的内存块、维护空闲列表等
- 内存碎片:大量小内存块的分配和释放会导致堆内存碎片化,降低内存利用率
- 缓存局部性差:堆上分配的小对象在内存中分布散乱,访问时缓存命中率低
1class string {
2 struct _Alloc_hider {
3 char* _M_p; // 指向数据的指针
4 } _M_dataplus;
5
6 size_t _M_string_length;
7
8 enum { _S_local_capacity = 15 };
9
10 union …

