Je te rassure, c'est très peu utilisé en pratique.
Bah, limité en taille, oui, ça dépend de la taille de ta pile. Si tu fais pas gaffe, tu peux facilement arriver à un stack overflow. C'est exactement la même chose que si tu déclarais un tableau de très grande taille dans une fonction, tu as de grosses chances que ton programme plante à l'exécution.
Après, il me semble qu'il n'y a rien de figé, ça peut très bien être alloué sur la pile ou sur le tas. Il me semble que GCC le fait sur la pile, d'où ma remarque sur la taille de la pile. :)
Quant a utiliser malloc, je pense qu'il faut faire la part des choses, si on doit allouer des tableaux de grande taille, oui malloc est à préférer. Par contre si tu dois utiliser des tableaux de taille relativement petite, je suis d'avis d'utiliser des tableaux sur la pile (ou avec alloca() ça revient au même).