/ / É um array 3D contíguo na memória, que tal um 2d? - c ++, c, matrizes

É um array 3D contíguo na memória, que tal um 2d? - c ++, c, matrizes

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 № 1

Sim, 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.