假设我有以下代码:
a = reverse b
doSomething a
列表a
的内存是否会被实际分配,或者doSomething
只会重复使用列表b
?如果要分配内存,有没有办法避免它?仅仅因为我需要一个反向列表而使内存使用率翻倍并不是特别好听。
答案 0 :(得分:0)
在最坏的情况下,a
和b
都将完整地存在于内存中。请注意,即使这样,两个列表中的内容也只存在一次,在两个列表之间共享,所以我们只讨论" spine"列表中存在两次。
在最好的情况下,根据b
的定义方式以及doSomething
的作用,编译器可能会做一些启发魔法,将整个事物转换为生成内容的紧密的常量空间循环列表处理它们时,可能根本不涉及内存分配。也许
但即使在最糟糕的情况下,你也会重复列表的主干。您永远不会复制列表中的实际元素。
(每个cons节点是什么,3个指针?我认为......)