LLVM自定义数据结构概述

3 篇文章 0 订阅
1 篇文章 0 订阅

主要参考资料:

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*>类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值