Maison > développement back-end > C++ > Pouvez-vous déterminer la taille d'un tableau alloué avec `new T[]` en C ?

Pouvez-vous déterminer la taille d'un tableau alloué avec `new T[]` en C ?

DDD
Libérer: 2024-11-08 05:39:01
original
417 Les gens l'ont consulté

Can You Determine the Size of an Array Allocated with `new T[]` in C  ?

Les tableaux alloués avec le nouveau T[] peuvent-ils divulguer leur taille ?

Contrairement à son homologue delete[], qui connaît intrinsèquement la taille du tableau alloué, C ne dispose pas d'un mécanisme pour vérifier par programme la taille d'un tableau créé à l'aide de new T[].

Explorer la distinction

Le nœud de cette disparité réside dans la nature intrinsèque de delete[]. Lors de la compilation, la taille du tableau est méticuleusement préservée par le runtime ou le gestionnaire de mémoire du système d'exploitation. Toutefois, ces informations restent inaccessibles au compilateur. À l'inverse, sizeof(), un opérande du compilateur plutôt qu'une véritable fonction, ne peut pas déterminer la taille des tableaux alloués dynamiquement car leur étendue est incertaine au moment de la compilation.

Exemple illustratif

Considérez cet exemple de code :

int *arr = new int[256];
int *p = &arr[100];
printf("Size: %d\n", sizeof(p));
Copier après la connexion

Ici, le compilateur est confronté à un dilemme déroutant : comment déterminer la taille de p. Les pointeurs d'un tableau manquent de connaissance inhérente du début ou de la fin du bloc de mémoire alloué. Ils peuvent indiquer le début du bloc, un élément spécifique à l'intérieur de celui-ci ou même un emplacement arbitraire.

Limites inhérentes

Les tableaux C et C, contrairement aux tableaux de première classe objets, dégénérent en pointeurs. Le compilateur et le programme ne savent pas si le pointeur identifie le début d'un nouveau bloc, un objet individuel ou une adresse intermédiaire.

Ce choix de conception découle de la nature déléguée de la gestion de la mémoire en C et C , laissant au programmeur et au système d'exploitation. Les implémentations nouvelles et supprimées varient considérablement selon les plates-formes et les scénarios, ce qui exclut la standardisation au sein de la norme C.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal