Должны ли ссылки внутри массива строк быть последовательными? - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть вопрос относительно реализации массива строк.Допустим, у меня есть этот массив:

string[] strings = new string[4];

Я знаю, что есть массив из 4 мест.Расстояние между ячейками одинаковое, поэтому массив знает, как добраться до каждой ячейки.

Мои вопросы касаются ссылок внутри ячеек. Должны ли они также быть на одинаковом расстоянии?Каждый элемент может быть где угодно?

1 Ответ

0 голосов
/ 31 декабря 2018

Массив всегда размещается в непрерывной ячейке памяти.Если среда выполнения не может найти непрерывное местоположение, то возникает исключение среды выполнения.IIRC это будет OutOfMemoryException.

Тот факт, что массив расположен в непрерывной части памяти, не означает, что объекты являются.Если тип элементов массива является ссылочным типом, как в случае с string, это никак не может быть так, потому что при выделении массива невозможно знать, сколько памяти потребуется каждой строке.Размер ссылок на объекты общеизвестен, а не размер самих объектов.

Теперь, если тип элементов массива является типом значения, то размер известен перед рукой и массивом.выделит экземпляры самих объектов в слоте непрерывной памяти.

Итак, для краткости:

  • Если массив относится к ссылочному типу, тогда ссылки будутвыделяется в слоте непрерывной памяти.Упомянутые объекты, с другой стороны, могут быть размещены в любом месте памяти.
  • Если массив имеет тип значения, сами экземпляры будут размещены в слоте непрерывной памяти.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...