主要参考资料:
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*>类似