Réallocation de mémoire en C
Lorsqu'ils travaillent avec l'allocation dynamique de mémoire en C, les développeurs rencontrent souvent le besoin de réallouer de la mémoire pour s'adapter aux changements de données taille. Contrairement aux langages comme C, C ne fournit pas de fonction de réallocation explicite.
Considérer des alternatives
Supprimer le pointeur actuel et en allouer un nouveau avec une taille plus grande est pas une solution optimale en raison de son inefficacité. Vous trouverez ci-dessous une meilleure approche utilisant la bibliothèque standard.
Utilisation des vecteurs de la bibliothèque modèle standard (STL)
Les vecteurs STL offrent un moyen pratique de gérer l'allocation et le redimensionnement dynamiques de la mémoire. Ils offrent des capacités de réallocation efficaces grâce à leur fonction de redimensionnement des membres. Voici comment utiliser les vecteurs pour la réaffectation :
Conversion de code :
// Old C code using realloc Type* t = (Type*)malloc(sizeof(Type)*n) memset(t, 0, sizeof(Type)*m) // New C++ code using std::vector std::vector<Type> t(n, 0); // Resizing in C using realloc t = (Type*)realloc(t, sizeof(Type) * n2); // Resizing in C++ using vector::resize t.resize(n2);
Fonction d'appel avec des vecteurs :
À passez un vecteur dans une fonction, utilisez la syntaxe suivante :
Foo(&t[0]); // Instead of Foo(t)
Cela garantit la compatibilité avec les arguments de la fonction en attendant des arguments de pointeur.
Avantages des vecteurs STL
L'utilisation de vecteurs STL pour la réallocation de mémoire offre plusieurs avantages :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!