Roy*_*mir 8 .net c# arrays generics memory-management
http://msdn.microsoft.com/en-us/library/ms379570(v=vs.80).aspx
我知道,Arrays
在.net
被存储在一个连续的方式.(在mem中)
我也知道List<..>
不是.(好吧......不是所有列表类型......请参阅我的第2个问题)
从这里我有2个问题
我知道在4,8,16 ...插入项目到列表后 - 列表reallocate
本身在内存中.
我也知道我可以把他发送给他Capacity
,以便让他知道我将创造他的大小(减少重新分配).
问题是为什么?他不会连续存放自己,为什么他关心重新分配自己呢?(他不必找到免费和连续的存储单元)
为什么带有结构的List是否在连续内存中分配,与类列表不同?
Ree*_*sey 21
List<T>
连续存储内存.在内部,它使用数组进行存储.达到容量后,将分配新阵列并复制内存.
对于List<T>
类或结构的实例都是如此.但是,何时T
是引用类型(类),您将存储连续的引用列表.类实例不能是连续的,因为您可以包含一个列表,该列表包含对同一个类实例的100个引用.
因此,要解决您的具体问题:
问题是为什么?他不会连续存放自己,为什么他关心重新分配自己呢?
它确实连续存储项目,这就是需要重新分配的原因.
为什么带有结构的List是否在连续内存中分配,与类列表不同?
两者都是连续存储的,但在第二种情况(类)中,您存储了对类实例的引用列表.