Se eu declarar uma matriz de estilo c 2d
int data[X][Y]
Eu estou supondo que o compilador irá criar isso como um único array semelhante ao
int data[X*Y]
mas isso é garantido?
Vamos dizer por simplicidade que estamos usando compiladores padrão em uma arquitetura x86.
int data[X][Y][Z]
?
O compilador cria isso como um bloco contíguo de memória e apenas faz alguns ajustes com os deslocamentos?
Eu normalmente uso um único vetor para uma matriz 2Dcom offsets row * NumCols + col e tenho uma função inline para calcá-lo para mim, mas eu estava interessado em um array 3D para essa questão. Também devo perguntar se alguém fez isso com um único vetor e qual seria também a lógica de deslocamento.
Respostas:
8 para resposta № 1Sim, matrizes multidimensionais de qualquer ordem em C são contíguas. Eles são apenas "matrizes de matrizes", por assim dizer. Muito mais no comp.lang.c FAQ, seção 6, matrizes e ponteiros.
6 para resposta № 2
As matrizes resultantes serão contíguas na área de memória virtual atribuída ao seu processo. Os arrays podem não ser contíguos na memória física, mas isso não deve importar para você.
2 para resposta № 3
Os elementos nas matrizes são garantidos como contíguos, portanto, o layout é o mesmo em ambos os casos.