Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Чем отличается хранение в памяти массивов из величин значимого и ссылочного типа?

#c_sharp #массивы #память #типы #c_sharp_faq


Чем отличается хранение в памяти массивов из величин значимого и ссылочного типа?
    


Ответы

Ответ 1



Массив - это непрерывная область памяти, в которой последовательно, друг за другом, размещены некоторые элементы. У массива есть заголовок, о котором, обычно, никто не говорит (и не знает), и собственно значения. Если речь о значимых типах (структурах), они размещаются непосредственно в области выделенной для массива. В случае ссылочных типов (классов), их экземпляры размещаются в куче, а массив содержит всё те же структуры (IntPtr) - указатели на эти объекты. В отличии от массива значимых типов, массив ссылочных типом может содержать элементы указывающие на один и тот же объект.

Ответ 2



Если отвлечься от специфики именно массивов C# (которые являются ссылочными), то переменная значимого типа хранит непосредственно значение, а переменная ссылочного типа хранит адрес значения. Само значение при этом хранится в динамической памяти (куче).

Ответ 3



Все массивы являются ссылочными типами. Arrays are mechanisms that allow you to treat several items as a single collection. The Microsoft® .NET Common Language Runtime (CLR) supports single-dimensional arrays, multidimensional arrays, and jagged arrays (arrays of arrays). All array types are implicitly derived from System.Array, which itself is derived from System.Object. This means that all arrays are always reference types which are allocated on the managed heap, and your app's variable contains a reference to the array and not the array itself. https://stackoverflow.com/questions/1533757/is-int-a-reference-type-or-a-value-type https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/bb985948(v=msdn.10)

Комментариев нет:

Отправить комментарий