Bonjour,

j'ai un tableau d'unsigned short à 3 entrées, par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
unsigned short myTab[4][4][256 * 256];
Il très important, pour mon utilisation, de garder cette notion de tri-dimensionalité. Et lorsque je traite un tableau[i][j][256 * 256], je n'utilise pas les autres tableaux[x][y][256 * 256].

Je sais que l'utilisation de tableaux uni-dimensionnels est préférée à des tableaux mutli-dimensionnels ; les temps d'accès aux éléments d'un tableau multi-dimensionnels sont plus longs.

Par contre, quelle est la meilleure solution ?

Cas n°1 : myTab devient un tableau uni-dimensionnel, et j'utilise des offsets pour accéder aux parties qui m'intéressent :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
unsigned short myTab[4 * 4 * 256 * 256];
 
int offset00 = 0;
int offset01 = offset00 +  256 * 256;
int offset02 = offset01 +  256 * 256;
int offset03 = offset02 +  256 * 256;
int offset10 = offset03 +  256 * 256;
//... etc ...
int offset33 = offset32 +  256 * 256;
 
// et pour accéder à mon "original" myTab[2][1][65]
myTab[offset21 + 65] = 8;
Par contre je risque d'encombrer le cache inutilement puisque, comme le l'ai dit plus haut, lorsque je traite un tableau[i][j][256 * 256], je n'utilise pas les autres tableaux[x][y][256 * 256].

Cas n°2 : je déclare 16 tableaux de 256 * 256 que je réunis dans un tableau de pointeurs :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unsigned short myTab00[256 * 256];
unsigned short myTab01[256 * 256];
unsigned short myTab02[256 * 256];
unsigned short myTab03[256 * 256];
unsigned short myTab10[256 * 256];
unsigned short myTab11[256 * 256];
unsigned short myTab12[256 * 256];
unsigned short myTab13[256 * 256];
//... etc ...
 
// je réunis le tout dans une table de pointeurs
unsigned short * ptrOnMyTab[4][4];
 
ptrOnMyTab[0][0] = &myTab00[0];
ptrOnMyTab[0][1] = &myTab01[0];
ptrOnMyTab[0][2] = &myTab02[0];
ptrOnMyTab[0][3] = &myTab03[0];
ptrOnMyTab[1][0] = &myTab10[0];
//... etc ...
 
// et pour accéder à mon "original" myTab[2][1][65]
ptrOnMyTab[2][1][65] = 8;
Dans ce cas, je me demande si ça ne revient pas finalement au cas original myTab[4][4][256*256]

Alors qu'elle est la meilleure solution au final ?

Merci

Flo.