Quel était le raisonnement derrière ne pas stocker explicitement la longueur d'un tableau avec un tableau C
?
À mon avis, les raisons sont très nombreuses mais peu favorables à la norme (C89). Par exemple:
- Avoir la longueur disponible dans un tampon peut empêcher un dépassement de tampon.
- Un style Java
arr.length
est à la fois clair et évite au programmeur de devoir garder plusieursint
s sur la pile s’il utilise plusieurs tableaux - Les paramètres de fonction deviennent plus convaincants.
Mais peut-être la raison la plus motivante, à mon avis, est-elle que généralement, aucun espace n'est économisé sans conserver la longueur. J'oserais dire que la plupart des utilisations de tableaux impliquent une allocation dynamique. Certes, il peut arriver que des personnes utilisent un tableau alloué sur la pile, mais il ne s’agit que d’un seul appel de fonction *: la pile peut gérer 4 ou 8 octets supplémentaires.
Puisque le gestionnaire de tas doit suivre la taille de bloc libre utilisée par le tableau alloué dynamiquement, pourquoi ne pas rendre cette information utilisable (et ajouter la règle supplémentaire, vérifiée au moment de la compilation, qui interdit de manipuler explicitement la longueur à moins de le faire aimer se tirer une balle dans le pied).
La seule chose que je peux penser de l'autre côté est qu'aucun suivi de longueur peut avoir fait des compilateurs plus simple, mais pas que beaucoup plus simple.
* Techniquement, on pourrait écrire une sorte de fonction récursive avec un tableau avec stockage automatique, et dans ce cas (très complexe) le stockage de la longueur peut effectivement entraîner une utilisation réellement plus importante de l'espace.
malloc()
zone ed ne peut-elle pas être demandée de manière portable?" C'est une chose qui me fait me demander plusieurs fois.