重复对象的列表 - 内存成本是多少?

7
在实例化列表后(因此忽略与创建列表相关的开销),重复将相同对象添加到列表中的内存成本是多少?我认为以下内容只是将相同的指针一遍又一遍地添加到列表中,因此该列表实际上并没有占用很多内存。有人能确认这是否属实吗?
List<newType> list = new List<newType>();

newType example = new newType();

for (int i = 0; i < 10000; i++)
{
   list.Add(example);
}

假设一个新的newType占用的内存比指针多得多。请注意,newType是一个类。
2个回答

6
这取决于newType是一个引用类型(class)还是值类型(struct)。 对于引用类型,您的解释是正确的,但对于值类型,它们会被完整复制,因此在向列表添加元素时,列表的大小将随着值类型的大小而增长。另外请注意,随着元素的添加,列表的增长不会均匀,因为内部的List在分配内存时会按块进行,以期望容纳更多的元素。

@CarlBenson 那么你是正确的——请看安德鲁·哈尔对正在发生的事情的精彩解释。 - Sergey Kalinichenko

2

由于您将存储对同一对象的多个引用,因此开销很小。列表仅存储添加的对象的引用,而这些对象本身是在其他地方分配的。由于您多次添加相同的对象,它们将全部指向堆上的同一对象,因此唯一的开销将是这些引用本身。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接