2015-04-24 1 views
0

On dit que l'accès à l'élément de tableau est rapide dans un langage de programmation connaissant un index numérique de l'élément. Je suppose que c'est parce que la mémoire de l'ordinateur est un peu comme un tableau avec chaque emplacement de mémoire ayant une adresse numérique. Donc, connaissant l'adresse mémoire, nous pouvons aller directement à cette adresse et accéder à une valeur stockée là.Comment l'élément de tableau est-il situé sans itération de tableau?

Comment cet emplacement de mémoire est-il accédé rapidement? Est-ce fait au niveau du microcode?

Répondre

0

La variable locale référence réellement l'emplacement de mémoire du premier élément dans le tableau. Les éléments du tableau ont une taille fixe (par exemple 4 octets pour un entier) et sont stockés dans l'ordre dans un bloc de mémoire contigu. Le calcul de l'emplacement de mémoire d'un élément est memory location of first element + (size in bits of single element * index of element) pour un tableau à une seule dimension. Notez que l'index utilisé dans le calcul est basé sur zéro, ce qui explique pourquoi la plupart des langues utilisent des index basés sur zéro pour les tableaux. Les éléments d'un tableau peuvent en fait être des références à des objets pour garder les tailles d'éléments fixes, plutôt que l'objet lui-même qui pourrait être de taille variable.

Explication supplémentaire pour le tableau multidimensionnel: Les emplacements d'éléments dans un tableau multidimensionnel peuvent être calculés à l'aide de location of element [0][0] + (size of single element * (index for 1st dimension + (index for 2nd dimension * length of 1st dimension) + ... + (index for nth dimension * length of (n-1)th dimension * ... * length of 1st dimension))) dans le système principal de la colonne. Il y a deux systèmes, colonne major et rang majeur. Look at this page for a visualization Ce calcul est encore assez simple pour un ordinateur même s'il semble compliqué ici. Les tableaux multidimensionnels pourraient également être implémentés sous la forme d'un tableau de tableaux, ce qui serait légèrement plus lent et moins efficace en mémoire.

Contrôle hors limites: Le calcul de la position de l'élément ne tient pas compte des indices supérieurs à la longueur du tableau, ce qui peut entraîner l'accès à des emplacements de mémoire à l'extérieur de la matrice. Le langage C n'empêche pas cela. Java lance une exception OutOfBoundsException, mais l'accès au tableau devient légèrement plus coûteux en raison d'une vérification en cours. La vérification hors limites est spécifique à la langue, si elle est implémentée