Maison  >  Article  >  développement back-end  >  Comment déterminer la taille d’un tableau alloué dynamiquement en C ?

Comment déterminer la taille d’un tableau alloué dynamiquement en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 21:48:03261parcourir

How Can You Determine the Size of a Dynamically Allocated Array in C  ?

Détermination de la taille d'un tableau après allocation dynamique en C

En C, les tableaux alloués dynamiquement à l'aide de l'opérateur new n'exposent pas intrinsèquement leur taille par programme. Cette question découle de l'observation selon laquelle delete[] doit être conscient de la taille du tableau alloué pour libérer efficacement la mémoire.

Pourquoi aucune fonction intégrée pour obtenir la taille du tableau ?

Contrairement aux tableaux déclarés sur la pile, dont la taille peut être déterminée à l'aide de sizeof(), la taille des tableaux alloués dynamiquement est inconnue lors de la compilation. En effet, le gestionnaire de mémoire du runtime ou du système d'exploitation gère la mémoire allouée, et non le compilateur. sizeof() fonctionne comme une constante de compilation et ne peut pas évaluer dynamiquement les tailles des tableaux alloués dynamiquement.

Stratégies alternatives

Même si C ne fournit pas de pour obtenir la taille du tableau, il existe des approches alternatives :

  • Sémantique du pointeur :Les tableaux en C se désintègrent en pointeurs. En manipulant le pointeur, on peut déduire la taille du tableau par soustraction, comme démontré dans l'exemple suivant :
int *arr = new int[256];
int *p = &arr[100];
int size = p - arr; // Subtracting pointers yields the size
  • Gestion personnalisée de la mémoire : Si le contrôle de la mémoire Si la gestion est souhaitée, on peut implémenter un schéma de gestion de mémoire personnalisé qui suit la mémoire allouée et ses tailles. Cette approche nécessite une manipulation prudente et introduit ses propres complexités.

Implications

L'absence d'un moyen standardisé pour déterminer la taille des tableaux alloués dynamiquement dans les tiges C de l'accent mis par le langage sur la flexibilité de la gestion de la mémoire et l'indépendance de la plate-forme. Bien qu'il présente des limites dans certains scénarios, il permet également diverses stratégies de mise en œuvre et opportunités d'optimisation.

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