/ / Czy tablica 3d jest ciągła w pamięci, a co z 2D? - c ++, c, tablice

Czy tablica 3d jest ciągła w pamięci, a co z dyskiem 2d? - c ++, c, tablice

Jeśli zadeklaruję tablicę 2d w stylu c

int data[X][Y]

Zakładam, że kompilator utworzy to jako pojedynczą tablicę podobną do

int data[X*Y] ale czy to jest gwarantowane?

Powiedzmy, że dla uproszczenia używamy standardowych kompilatorów w architekturze x86. A teraz

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

Czy kompilator tworzy to jako ciągły blok pamięci i po prostu majstruje przy przesunięciach?

Zwykle używam pojedynczego wektora dla tablicy 2dz przesunięciem wiersza * NumCols + col i mieć funkcję wstawiania, aby ją dla mnie obliczyć, ale byłem zainteresowany tablicą 3d dla tego pytania. Powinienem również zapytać, czy ktoś zrobił to z jednym wektorem i jaka byłaby również logika przesunięcia.

Odpowiedzi:

8 dla odpowiedzi № 1

Tak, tablice wielowymiarowe dowolnego rzędu w C są ciągłe. Są to „tablice tablic”, że tak powiem. Dużo więcej na comp.lang.c FAQ, sekcja 6, Tablice i wskaźniki.


6 dla odpowiedzi nr 2

Powstałe tablice będą ciągłe w obszarze pamięci wirtualnej przypisanym do procesu. Tablice mogą nie być ciągłe w pamięci fizycznej, ale nie powinno to mieć dla ciebie znaczenia.


2 dla odpowiedzi nr 3

Elementy w tablicach są zagwarantowane, że są ciągłe, więc układ jest taki sam w obu przypadkach.