Salut! Il faut savoir que tous les types ont une taille mémoire fixe même les vecteurs. Alors comment les vecteurs peuvent ils grandir? Et bien en fait la taille du vecteur ne change pas. C’est seulement la taille de la mémoire allouée par le vecteur. Les String marchent de la même façon donc je vais expliquer ça avec une image du book.
La structure interne d'une String (peut être appliqué aux Vecs)
Tu peut voire que ptr pointe vers une slice de u8 contenant le texte. Cette slice est allouée sur le tas (heap), et est donc gérée par la String, or sur la pile (stack), la taille ne change pas, et c’est ce qui intéresse Rust. Le fait que le type alloue de la mémoire n’est qu’un détail qui ne concerne que lui. J’espère avoir été clair bien que ce soit un concept un peu compliqué, donc n’hésite pas à me demander si tu ne comprends pas.
Euh, en fait ça dépend de ce que tu appelles mutable. Tous les types dont la taille peut changer au runtime suivent cette logique appelée allocation dynamique. Par contre les variables déclarées avec let mut (appelées aussi variables mutables) ne suivent pas forcément cette logique. Un i8, par exemple fait 8 bits et ne grandira pas pendant l’exécution même si déclaré comme suit.
letmut mutable_variable: i8 = 0; // mutable_variable ne grandira pas au runtime bien qu'il soit mutable
Bref, si tu demandes si tous les types dont la taille peut changer au runtime suivent cette logique, la réponse est oui, et c’est aussi valable dans d’autres langages compilés comme le C!
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte