【发布时间】:2015-12-04 03:32:43
【问题描述】:
谁能帮助解释一下为什么下面的代码在运行时会消耗超过 100 MB 的 RAM?
public struct Trie<Element : Hashable> {
private var children: [Element:Trie<Element>]
private var endHere : Bool
public init() {
children = [:]
endHere = false
}
public init<S : SequenceType where S.Generator.Element == Element>(_ seq: S) {
self.init(gen: seq.generate())
}
private init<G : GeneratorType where G.Element == Element>(var gen: G) {
if let head = gen.next() {
(children, endHere) = ([head:Trie(gen:gen)], false)
} else {
(children, endHere) = ([:], true)
}
}
private mutating func insert<G : GeneratorType where G.Element == Element>(var gen: G) {
if let head = gen.next() {
let _ = children[head]?.insert(gen) ?? { children[head] = Trie(gen: gen) }()
} else {
endHere = true
}
}
public mutating func insert<S : SequenceType where S.Generator.Element == Element>(seq: S) {
insert(seq.generate())
}
}
var trie = Trie<UInt32>()
for i in 0..<300000 {
trie.insert([UInt32(i), UInt32(i+1), UInt32(i+2)])
}
根据我的计算,上述数据结构的总内存消耗应该在以下某处...
3 * count * sizeof(Trie<UInt32>)
或者——
3 * 300,000 * 9 = 8,100,000 bytes = ~8 MB
这个数据结构在运行时消耗超过 100 MB 的原因是什么?
【问题讨论】:
标签: xcode swift dictionary memory trie