Bonjour,
j'ai un tableau d'unsigned short à 3 entrées, par exemple :
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].
Code : Sélectionner tout - Visualiser dans une fenêtre à part unsigned short myTab[4][4][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 :
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].
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;
Cas n°2 : je déclare 16 tableaux de 256 * 256 que je réunis dans un tableau de pointeurs :
Dans ce cas, je me demande si ça ne revient pas finalement au cas original myTab[4][4][256*256]
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;
Alors qu'elle est la meilleure solution au final ?
Merci
Flo.
Partager