/ / ¿Es un arreglo 3d contiguo en la memoria, que tal un 2d? - c ++, c, matrices

¿Hay una matriz 3d contigua en la memoria? ¿Qué pasa con una 2D? - c ++, c, matrices

Si declaro un array 2d estilo c

int data[X][Y]

Supongo que el compilador creará esto como una matriz única similar a

int data[X*Y] pero esta garantizado?

Digamos, por simplicidad, que estamos utilizando compiladores estándar en una arquitectura x86.

int data[X][Y][Z]?

¿El compilador crea esto como un bloque de memoria contiguo y solo hace algunos retoques con las compensaciones?

Normalmente uso un solo vector para una matriz 2dcon la fila de compensaciones * NumCols + col y tengo una función en línea para calcularlo, pero me interesó una matriz 3D para esta pregunta. También debería preguntar si alguien ha hecho esto con un solo vector y cuál sería también la lógica de compensación.

Respuestas

8 para la respuesta № 1

Sí, las matrices multidimensionales de cualquier orden en C son contiguas. Son "solo matrices" de matrices ", por así decirlo. Mucho más en el Comp.lang.c FAQ, sección 6, Arrays y punteros.


6 para la respuesta № 2

Las matrices resultantes serán contiguas en el área de memoria virtual asignada a su proceso. Es posible que las matrices no sean contiguas en la memoria física, pero eso no debería importarte.


2 para la respuesta № 3

Se garantiza que los elementos en las matrices son contiguos, por lo que el diseño es el mismo en ambos casos.