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 № 1Sí, 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.