字符串数组中的引用必须连续吗?

时间:2018-12-30 18:55:30

标签: c# arrays string

我对字符串数组的实现有疑问。 假设我有这个数组:

string[] strings = new string[4];

我知道这里有4个地方的数组。 单元之间的距离相同,因此数组知道如何到达每个单元。

我的问题是关于单元格内的引用, 它们也必须保持相同的距离吗? 每个元素都可以在任何地方吗?

1 个答案:

答案 0 :(得分:2)

始终将数组分配在连续的内存位置中。如果运行时找不到连续的位置,则会引发运行时异常。 IIRC将会是OutOfMemoryException

将数组分配在连续的内存块中这一事实并不意味着对象存在。如果数组项的类型是引用类型(如您在string中的情况),则不可能如此,因为它不可能知道在分配数组时每个字符串将需要多少内存。引用对象的大小是众所周知的,而不是对象本身的大小。

现在,如果数组项的类型是值类型,那么大小是事先已知的,数组将把对象本身的实例放置在一个连续内存插槽中。

因此,简而言之:

  • 如果数组是引用类型,则引用将分配到一个连续内存插槽中。另一方面,引用的对象可以放在内存中的任何位置。
  • 如果数组是值类型,则实例本身将分配到一个连续内存插槽中。