例如,我们有10 ^ 7个32位整数.将这些整数存储在数组中的内存使用量为32*10 ^ 7/8 = 40MB.但是,将10 ^ 7个32位整数插入到一个集合中需要超过300MB的内存.码:
#include <iostream>
#include <set>
int main(int argc, const char * argv[]) {
std::set<int> aa;
for (int i = 0; i < 10000000; i++)
aa.insert(i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
像其他容器map
,unordered_set
需要用类似的测试甚至更多的内存.我知道该集是用红黑树实现的,但数据结构本身并不能解释高内存使用率.
我想知道这5到8倍的原始数据内存使用背后的原因,以及更高内存效率集的一些解决方法/替代方案.