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