【问题标题】:Does the references inside the array of strings must be consecutive?字符串数组中的引用是否必须是连续的?
【发布时间】:2018-12-30 18:55:30
【问题描述】:

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

string[] strings = new string[4];

我知道有 4 个位置的数组。 单元格之间的距离相同,因此数组知道如何到达每个单元格。

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

【问题讨论】:

  • 您是否在问存储在数组单元格中的字符串指针是否必须指向相邻的内存块,这些内存块也按顺序排列且彼此之间的距离相同,就像数组元素本身一样?如果是这样,那么不,他们没有,而且通常是不可能实现的。
  • 谢谢。这正是我问的。

标签: c# arrays string


【解决方案1】:

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

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

现在,如果数组项的类型是值类型,那么大小是事先知道的,并且数组会将对象本身的实例分配到一个连续的内存槽中。

所以,简而言之:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2021-11-13
    • 2020-08-09
    • 2020-08-28
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多