我对字符串数组的实现有疑问。 假设我有这个数组:
string[] strings = new string[4];
我知道这里有4个地方的数组。 单元之间的距离相同,因此数组知道如何到达每个单元。
我的问题是关于单元格内的引用, 它们也必须保持相同的距离吗? 每个元素都可以在任何地方吗?
答案 0 :(得分:2)
始终将数组分配在连续的内存位置中。如果运行时找不到连续的位置,则会引发运行时异常。 IIRC将会是OutOfMemoryException
。
将数组分配在连续的内存块中这一事实并不意味着对象存在。如果数组项的类型是引用类型(如您在string
中的情况),则不可能如此,因为它不可能知道在分配数组时每个字符串将需要多少内存。引用对象的大小是众所周知的,而不是对象本身的大小。
现在,如果数组项的类型是值类型,那么大小是事先已知的,数组将把对象本身的实例放置在一个连续内存插槽中。
因此,简而言之: