Maison  >  Article  >  développement back-end  >  En quoi l’allocation de mémoire en C diffère-t-elle dans VC6 par rapport aux compilateurs plus récents ?

En quoi l’allocation de mémoire en C diffère-t-elle dans VC6 par rapport aux compilateurs plus récents ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 11:03:01886parcourir

How Does Memory Allocation in C   Differ in VC6 Compared to Newer Compilers?

Nouvelle allocation en C

En C , lorsque le nouvel opérateur ne parvient pas à allouer de la mémoire, il lève une exception std::bad_alloc. Cependant, certains compilateurs, tels que VC6, s'écarteraient de cette norme.

Comportement VC6

VC6 n'adhère pas à la norme C et renvoie à la place 0 (ou NULL ) lorsque l'allocation de mémoire échoue. Cette non-conformité peut conduire à un code qui semble désordonné en raison de la nécessité constante de vérifier NULL après chaque nouvelle instruction.

Résolution

Microsoft reconnaît ce problème dans Knowledge Article de base KB276944. Pour contourner ce problème dans VC6, MSVC permet la liaison avec un nouveau gestionnaire personnalisé. Dans les compilateurs MSVC plus récents (7.0 et versions ultérieures), la liaison avec le fichier objet nothrownew.obj offre le même comportement que VC6.

VS2005 et au-delà

MSVC 8.0 (VS2005 ) a introduit un changement où new augmente désormais systématiquement std::bad_alloc par défaut. L'option permettant de renvoyer 0 peut toujours être spécifiée à l'aide du paramètre std::nothrow, comme indiqué dans l'exemple de code fourni. Il s'agit d'une solution rétrocompatible qui permet au code de fonctionner avec n'importe quelle version du compilateur.

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