首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪一个内存少了?在Clojure原子中将项添加到长列表中,还是将项添加到映射中?

哪一个内存少了?在Clojure原子中将项添加到长列表中,还是将项添加到映射中?
EN

Stack Overflow用户
提问于 2015-01-21 11:27:28
回答 1查看 121关注 0票数 0

我正在进行一些工作,在其中我更新了许多项,这些项都是在Clojure原子中订购的。我既可以将项目存储为向量,也可以存储为索引地图。这些项目可能有数以百万计的附属物,所以我想选择最有效的内存结构。

我的直觉是,在地图中添加一个新项目比一个向量在数百万次迭代中使用的内存要少,但我想得到一个明确的答案:

因此,如果有一个向量,它可能是:

代码语言:javascript
复制
["a" "b"  ... "y"] -> ["a" "b"  ... "y" "z"]

如果有了地图,就会是:

代码语言:javascript
复制
{0 "a"    1 "b"  ... 25 "y"} -> {0 "a"   1 "b"  ... 25 "y"   26 "z"}

那么哪一个会使用更少的内存?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 16:12:14

在Clojure中,向量和散列映射都使用试一试作为它们的基本实现技术。

Clojure的向量直接使用元素的索引作为键的值来遍历trie,以便找到值。比特分区是为了将索引分割成块比特,这些比特可以作为每个级别上的键。

另一方面,Clojure的散列映射对提供的索引进行散列,以创建一个键来遍历trie,以便找到值。位分区用于散列索引,而不是直接用于索引。

用于遍历向量和散列映射的trie的实际键是32位int。

我认为向量和散列映射之间在内存使用上的差异是可以忽略不计的。哈希映射应该使用稍微多一点的内存,以满足关键冲突,因此必须有哈希桶的开销。

对于向量和散列映射可在这里找到的实现细节,还有更深入的讨论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28066104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档