2010-05-03 2 views
8

Je voudrais savoir comment un tableau de longueur variable est géré (quelles variables ou structures de données supplémentaires sont conservées sur la pile pour avoir des tableaux de longueur variable).Variable Length Array

Merci beaucoup.

Répondre

4

C'est juste un tableau de taille dynamique (dépendant de l'implémentation, mais le plus souvent sur la pile). Il est à peu près comme alloca dans l'ancien temps, à l'exception que sizeof retournera la taille réelle du tableau, ce qui implique que la taille du tableau doit également être stockée quelque part (dépend de l'implémentation, mais probablement aussi sur la pile)).

+1

Ce n'est pas tout à fait vrai, car il n'y avait aucun moyen d'interroger la taille d'un tableau 'alloca()' après sa création, mais 'sizeof' fonctionne sur les VLA (donc si vous appelez 'sizeof' sur le tableau, cette taille doit être conservée quelque part). – caf

+0

@caf: bon point - Je suppose que la taille doit aussi être stockée quelque part (dépendante de l'implémentation) puis - je mettrai à jour ma réponse. –

1

La taille des tableaux de longueur variable est déterminée au moment de l'exécution, au lieu du temps de compilation.
La façon dont il est géré dépend du compilateur.
GCC, par exemple, alloue de la mémoire sur la pile.
Mais il n'y a pas de structure particulière. C'est juste un tableau normal, dont la taille est connue au moment de l'exécution.

-2

En variante, vous pouvez utiliser certains conteneurs, par ex. ArrayList en java ou vector en c/C++

+0

-1 n'a rien à voir avec la question (comment une fonctionnalité de C99 peut-elle être implémentée). –