• # Les différentes types d'allocation

    Posté par . En réponse au message langage C : pourquoi on ne peut pas allouer la taille d'un tableau pendant l'exécution du programme?. Évalué à 2.

    Pour comprendre le problème, il faut savoir qu'il y a 3 types d'allocations de mémoire possibles, cette page wikipedia le décrit assez bien :

    • allocation statique
    • allocation dynamique automatique
    • allocation dynamique manuelle

    Une variable déclarée dans une fonction sera allouée dynamiquement et gérée de façon automatique (déallocation lors de la fin d'exécution du bloc). La question posée est donc, pourquoi est-ce que l'allocation dynamique automatique doit être de taille fixe ?

    Pour le cas d'un tableau, il faut avoir en tête ce qu'est un tableau et en C : c'est un pointeur. L'indice de ton tableau est l'offset du pointeur. Ainsi, pour que l'illusion d'avoir un tableau fonctionne, il faut que les données soient organisées de façon ordonnée dans la mémoire.

    De façon schématique, ça ressemble à ça :

    | tab[0] | tab[1] | ... | tab[size-1] |

    Tant qu'il n'y a "rien" derrière ton tableau, tu pourrais l'agrandir mais si une variable vient s'ajouter derrière, le tableau ne pourra plus être agrandi. Comme ces allocations sont gérés dynamiquement, il n'est pas possible de pouvoir garantir l'agrandissement d'un tableau.