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));
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!