Maison  >  Article  >  développement back-end  >  Comment `delete[]` connaît-il la taille d'un tableau lorsqu'il s'agit de pointeurs ?

Comment `delete[]` connaît-il la taille d'un tableau lorsqu'il s'agit de pointeurs ?

DDD
DDDoriginal
2024-11-17 22:25:02683parcourir

How Does `delete[]` Know the Size of an Array When Dealing with Pointers?

Comment delete[] distingue-t-il les tableaux des autres pointeurs ?

En C , l'opérateur delete[] libère la mémoire allouée aux tableaux, mais comment sait-il quand un pointeur est un tableau ?

Compilateur Considérations

Malgré l'incertitude dans le code que vous avez fourni, le compilateur ne peut pas déterminer si un pointeur pointe vers un tableau ou un seul élément.

Informations sur le tableau géré

Les tableaux alloués dynamiquement stockent des informations supplémentaires au-delà du pointeur vers le premier élément. Ces informations incluent le nombre d'éléments dans le tableau.

Opération Supprimer[]

Lorsque delete[] est utilisé sur un pointeur de tableau, il utilise les informations supplémentaires pour :

  • Identifiez que l'allocation est un tableau.
  • Désalouez le nombre approprié de éléments.

Syntaxe "Supprimer" alternative

Certains ont remis en question la nécessité d'une syntaxe delete[] distincte puisque les bibliothèques d'exécution gèrent déjà les informations sur la taille du tableau. Cependant, le principe de conception original de C cherchait à minimiser les frais généraux pour les utilisateurs non-matrices en évitant l'allocation d'espace supplémentaire pour les blocs de mémoire non-matrices.

Supprimer[] Spécificité

Par conséquent, delete[] est utilisé pour informer explicitement les bibliothèques d'exécution que la mémoire allouée est un tableau, leur permettant de la désallouer correctement. Bien que cela puisse sembler excessif dans l'informatique moderne, cela peut néanmoins être bénéfique dans les scénarios où l'optimisation de la mémoire est critique.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn