连续的内存存储误解在.NET?
http://msdn.microsoft.com/en-us/library/ms379570(v=vs.80).aspx
我知道.net
中的Arrays
是以连续的方式存储的。 (在mem中)
我也知道List
不是。 (好吧……不是所有列表类型……请参阅我的第2个问题)
从这里我有2个问题
-
我知道在4,8,16 …插入项目到列表后 – 该列表在内存中
reallocate
自己。我也知道我可以向他发送
Capacity
,以便让他知道我将创建他的大小(以减少重新分配)。问题是为什么 ? 他不会连续存放自己,为什么他关心重新分配自己呢? (他不必找到免费和连续的存储单元)
-
为什么带有结构的List是否在连续内存中分配,与类列表不同?
List
会连续存储内存。 在内部,它使用数组进行存储。 达到容量后,将分配新arrays并复制内存。
这适用于类或结构的List
实例。 但是,当T
是引用类型(类)时,您将存储一个连续的引用列表 。 类实例不能是连续的,因为您可以包含一个列表,该列表包含对同一个类实例的100个引用。
因此,要解决您的具体问题:
问题是为什么? 他不会连续存放自己,为什么他关心重新分配自己呢?
它确实连续存储项目,这就是需要重新分配的原因。
为什么带有结构的List是否在连续内存中分配,与类列表不同?
两者都是连续存储的,但在第二种情况(类)中,您存储了对类实例的引用列表。
1)所有对象引用仍然是有条不紊地存储的
2)列表och类仍然必须让对象像普通对象一样存储。 thay不能被强制进入一个有名的数组 – 但是对它们的引用可以