Скажем, я передал адрес 2d-массива функции вместе со строкой и столбцом 2d-массива.
Функция будет обрабатывать адрес 2d-массива как 1d-массив. (например, int matrix [])
Если я выполню код ниже:
int** arr;
arr = new int*[row];
for ( int i = 0; i < row; i++ )
{
arr[i] = new int[column];
}
Гипотетически, я думаю, что в многопоточной системе это может не выделить непрерывную память для 2-го массива. Я прав?
Тем не менее, я думаю, что в однопоточной системе это выделит непрерывную память для 2d массива. Я прав? Если так, то всегда ли это правда? или это зависит от компилятора и ОС?
Если код сейчас такой:
int** arr;
int** arr2;
arr = new int*[row];
arr2 = new int*[row];
for ( int i = 0; i < row; i++ )
{
arr[i] = new int[column];
arr2[i] = new int[column];
}
У меня нет смежных 2d массивов памяти. Даже если элемент в каждой строке будет смежным, сами строки не будут смежными со следующей строкой. Я прав?
Если все вышеперечисленное верно, в C ++ не каждый 2d массив является смежной памятью, верно?
False, поскольку наиболее типичный 2D-массив такой, как показано ниже, и у него будет непрерывная память стека
int my2DArr[5][5];
Во всех случаях, которые вы упоминаете, никогда не будет гарантии, что вы получите смежные области памяти для двух соседних строк. Подумайте об этом: что если после того, как N ячеек памяти будет выделено для первой строки, а затем будут заняты следующие N ячеек? Тогда второй ряд не будет смежным с первым рядом. Но этот случай будет редким, если ваш 2D-массив небольшой.