La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.
Dispositions de tableau de type row-major et column-major
Les éléments d’un tableau peuvent être stockés dans une disposition de type column-major ou row-major. Pour un tableau stocké dans une disposition de type column-major, les éléments des colonnes sont contigus dans la mémoire. Dans une disposition de type row-major, les éléments des lignes sont contigus. La disposition d’un tableau est également appelée ordre, format ou représentation. L’ordre dans lequel les éléments sont stockés peut être important pour l’intégration, la facilité d’utilisation et la performance. Certains algorithmes sont plus performants avec des données stockées dans un certain ordre.
Les langages et environnements de programmation utilisent généralement une seule disposition de tableau pour toutes les données. MATLAB® et Fortran utilisent une disposition de type column-major par défaut alors que le C et le C++ utilisent une disposition de type row-major. Avec MATLAB Coder™, vous pouvez générer du code C/C++ qui utilise une disposition de type column-major ou row-major. Consultez la rubrique Generate Code That Uses Row-Major Array Layout.
Stockage de tableaux dans la mémoire des ordinateurs
La mémoire des ordinateurs stocke les données sous forme de tableaux unidimensionnels. Par exemple, si vous déclarez une matrice 3 x 3, le software la stocke sous forme de tableau unidimensionnel contenant neuf éléments. Par défaut, MATLAB stocke ces éléments dans une disposition de tableau de type column-major. Les éléments de chaque colonne sont contigus dans la mémoire.
Prenons l’exemple de la matrice A :
A =
1 2 3
4 5 6
7 8 9La matrice A est représentée dans la mémoire avec l’organisation suivante par défaut :
1 4 7 2 5 8 3 6 9
Dans une disposition de type row-major, le langage de programmation stocke les éléments des lignes côte à côte dans la mémoire. Les éléments du tableau sont donc stockés comme suit :
1 2 3 4 5 6 7 8 9
Les tableaux multidimensionnels peuvent également être stockés dans une disposition de type column-major ou row-major. Dans une disposition de type column-major, les éléments de la première dimension ou du premier index (le plus à gauche) sont contigus dans la mémoire. Dans une disposition de type row-major, les éléments de la dernière dimension ou du dernier index (le plus à droite) sont contigus.
Conversions entre différentes dispositions de tableau
Lorsque vous associez des données de type row-major et column-major dans le même code, des conversions de disposition de tableau sont nécessaires. Par exemple, vous pouvez générer du code comprenant des spécialisations de fonction row-major et column-major. Les spécialisations de fonction utilisent un seul type de disposition de tableau pour toutes les données d’entrée, de sortie et internes. Lorsque des données sont passées d’une fonction à une autre, le générateur de code insère automatiquement les conversions de disposition de tableau nécessaires. Les données d’entrée et de sortie des fonctions MEX générées sont également converties si nécessaire.
Pour les données à deux dimensions, les opérations de transposition effectuent une conversion entre les dispositions de type row-major et column-major. Prenons l’exemple de la version transposée de A :
A' =
1 4 7
2 5 8
3 6 9La disposition de type column-major de A' correspond à la disposition de type row-major de A. (Pour les nombres complexes, les conversions de disposition de tableau utilisent une transposée non conjuguée.)
Voir aussi
coder.columnMajor | coder.rowMajor | coder.isRowMajor | coder.isColumnMajor