Вопрос по arrays, .net – Прямоугольный массив физический в порядке памяти

6

В Си, в массиве говорятA[2][3] Самое правое изменение индекса привело к наименьшему смещению адреса памяти, то есть элементы были расположены в памяти какA[0][0], A[0][1]...

То же самое верно для прямоугольных массивов в .NET? Если у нас есть, скажем массивa[2, 3] элементы расположены в памяти какa[0, 0], a[0, 1]...?

@ Свик, ты просто неправ. Petr Abdulin
Вы не точно сравниваете сопоставимые данные. Ваш массив C на самом деле не является двумерным массивом, это массив массивов. Вы можете сделать то же самое в C #, например:int[][]неint[,]. svick
Нет, это то, как двумерные массивы реализованы в C. Они являются просто одномерным массивом, элементы которого сами являются одномерными массивами. Cody Gray♦
@CodyGray, кроме формального определения и понятия, они являются прямым аналогом прямоугольных массивов в C #. В то время какint[][] в C # это совершенно другая вещь, и является аналогом*int[] в С. Petr Abdulin

Ваш Ответ

1   ответ
16

Спецификация CLI, раздел 8.9.1, заявляет:

Array elements shall be laid out within the array object in row-major order (i.e., the elements associated with the rightmost array dimension shall be laid out contiguously from lowest to highest index). The actual storage allocated for each array element can include platform-specific padding.

Таким образом, ответ - да, вы сначала столкнетесь со всеми элементами первого ряда, затем со всеми элементами второго ряда и т. Д. (Как сказано в спецификации, это называетсяrow-major order).

Спасибо, лень было найти это самому! :) Petr Abdulin

Похожие вопросы