【发布时间】:2013-12-22 11:42:58
【问题描述】:
我正在阅读一篇关于 array vs list 的文章,作者说数组比列表更糟糕,因为(除其他外)数组是变量的列表,但对我来说列表也是变量列表。我的意思是,我仍然可以做到list[3] = new Item()。
实际上,我总是以某种方式看到 List<T> 就像一个数组的包装器,它允许我轻松使用它而无需关心处理它的结构。
T[] 和List<T> 在堆/堆栈内存使用方面的内部差异是什么?
【问题讨论】:
-
从技术上讲,
List<T>是数组的包装器。它在内部保存对数组的引用,因此 List会消耗更多内存(假设内部数组已完全填充)。但这种差异非常小(List 消费者大约有 20 到 30 字节的额外内存),所以不要过早优化。 -
那么作者是不是错了,在这件事上没有区别?
-
他在博文中明确指出,“有人可能会合理地指出
List<T>也是大量可变状态”。当然如此。堆使用量不是您可以完全忽略的细节,在常用的情况下,平均开销是 lots 超过 30 个字节。在this answer 中有很好的报道。
标签: arrays .net list heap-memory