主要参考资料:
http://llvm.org/docs/ProgrammersManual.html
http://llvm.org/docs/doxygen/html/
自定义数据结构的好处在于,STL在不同平台的性能不一样,而且缺一些需要的数据结构,例如C++11之前没有HashMaps。同时专门的数据结构会比一般化的快。
Vector
SmallVector
类似std::Vector。首先是固定容量的,其次可以如果达到上限还add元素,则会增大。
SmallVector<Instruction *, 10> worklist;
Instruction *I = ...;
worklist.push_back(I);
I = worklist.pop_back_val();SmallVector的插入性能明显优于 std::vector,提升可达1倍左右。
Maps
DensMap
DenseMap 是使用 quadratically probed HashMap,用 H+1^2, H+2^2, H+3^2...解决哈希冲突。时间高效,但是空间比一般HashMap用的多。插入后会导致 Iterator 失效。与HashMap相比插入时间相同,查询有明显提升。
StringMap
专门用于String作为Key的Map。插入是使用 GetOrCreateValue()。效果StringMap<Data>的效果却不如std::map<std:;string, Data>好。
Set
SmallSet
SmallSet<int*,1500>性能最差, SmallSet<int*, 10>与 set<int*>类似

本文探讨了自定义数据结构在C++中的应用,特别是STL中的一些不足之处以及如何通过SmallVector和DenseMap等自定义结构实现性能优化。文章深入分析了这些数据结构的特点与优势,提供了实际应用案例。

1507

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



