/ / È un array 3d contiguo in memoria, che dire di un 2d? - c ++, c, array

Una matrice 3d è contigua nella memoria, che dire di un 2d? - c ++, c, matrici

Se dichiaro un array in stile c 2D di

int data[X][Y]

Suppongo che il compilatore creerà questo come un singolo array simile a

int data[X*Y] ma questo è garantito?

Diciamo per semplicità che stiamo usando compilatori standard su un'architettura x86. Ora che dire

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

Il compilatore crea questo come un blocco contiguo di memoria e fa solo giocherellare con gli offset?

Normalmente uso un singolo vettore per un array 2dcon la riga di offset * NumCols + col e ho una funzione inline per calcolarlo, ma ero interessato a un array 3d per questa domanda. Dovrei anche chiedere se qualcuno ha fatto questo con un singolo vettore e quale sarebbe anche la logica di offset.

risposte:

8 per risposta № 1

Sì, le matrici multidimensionali di qualsiasi ordine in C sono contigue. Sono "solo" matrici di matrici ", per così dire. Molto di più al FAQ comp.lang.c, sezione 6, Array e puntatori.


6 per risposta № 2

Le matrici risultanti saranno contigue nell'area di memoria virtuale assegnata al processo. Le matrici potrebbero non essere contigue nella memoria fisica, ma ciò non dovrebbe importarti.


2 per risposta № 3

Gli elementi negli array sono garantiti contigui, quindi il layout è lo stesso in entrambi i casi.