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 ?
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!