Question 180

Comment choisir entre utiliser un tableau de taille fixe (statique) et un tableau dynamique ?

Que sont-ils ?

Il existe deux types de tableaux en VB : les tableaux dits de taille fixe (statiques), et les tableaux dynamiques. Ces derniers sont déclarés sans tailles et dimensionnés dynamiquement avant usage :

    Dim Tableau_1(100) As Long  ' tableau statique de 100 éléments
    Dim Tableau_2()    As Long  ' tableau dynamique
    
    ReDim Tableau_2(100)        ' dimensionnement dynamique

Quelles différences, quand les employer, comment choisir ?

Ces deux types de tableau s'utilisent de la même façon, à savoir que l'on accède toujours à un élément par son indice. Les vraies différences sont plus fondamentales :

Différences
Tableau de taille fixe Tableau dynamique
Dimensionnement à la compilation Dimensionnement à l'exécution
Taille immuable, non modifiable Redimensionnable à volonté
Erase ne libère pas la mémoire Erase libère la mémoire
Comment choisir l'un ou l'autre

Pour un usage local, pour des tableaux de petite taille ou dans des cas particuliers où la taille du tableau est directement liée à l'usage, un tableau de taille fixe est adapté. On évite un Redim, c'est donc une bonne solution.

Exemples d'utilisation 1

Utilisation d'un tableau local, de petite dimension et au nombre d'éléments fixés :

' Moyenne arithmétique 4 valeurs
'
Private Function Moyenne_4(a As Long, b As Long, c As Long, d As Long) As Double

    Dim t(1 To 4) As Long
    Dim i         As Long
    Dim r         As Long
    
    t(1) = a: t(2) = b: t(3) = c: t(4) = d
    
    For i = 1 To 4
        r = r + t(i)
    Next i
    
    Moyenne_4 = r / 4
    
End Function

Exemples d'utilisation 2

On utilise un tableau pour stocker les résultats de tirage d'un dé à jouer. Ici, les mesures portent sur un dé à 6 faces. La dimension du tableau est connue à l'avance, elle ne changera pas. C'est la nature même de ce qui est mesuré qui fixe les dimensions du tableau.

    Const NOMBRE_FACES As Long = 6
    Dim Nombre_Tirage_De(NOMBRE_FACES) As Long

 

Pour des tableaux de grande taille, ou quand le nombre d'éléments ne peut pas être déterminé à l'avance, ou pour implémenter des structures de données dynamiques, l'usage de tableaux dynamiques est définitivement recommandé. Il est de toute façon le seul qui permette l'allocation/réallocation. Tout ceci est exposé dans l'article : Comment réaliser des allocations dynamiques ?.

Exemples d'utilisation

Private Function Alea(ByVal n As Long) As Double()
    Dim t() As Double
    Dim i As Long
    
    ReDim t(n)
    For i = 1 To n
        t(i) = Rnd
    Next i
    Alea = t()
End Function

Private Sub Command1_Click()
    Dim t() As Double

    t() = Alea(100)
    ' libération de la mémoire après usage
    Erase t()
End Sub

Remarque : En fonction des options de compilation choisies, les performances pour ce qui est de l'accès aux éléments peuvent varier. C'est vrai pour les 2 types de tableaux. Avec les options par défaut, l'accès aux éléments est plus rapide avec un tableau statique. Cependant les différences sont si faibles et le gain porte sur des valeurs si petites que les performances ne doivent pas être un critère pour le choix de l'une ou l'autre variante de tableaux.

Pour aller plus loin

Voir aussi :

Date de publication : 06 mars 2008
Dernière modification : 06 mars 2008
Rubriques : Algorithmique, Divers
Mots-clés : tableau, tableaux, statique, dynamique, performance, performant, mémoire, fixe, dimension, dimensions, dimensionnement, redimensionner, taille, nombre, élément, éléments