Las asignaciones pueden fallar por varias razones. Lo que hace (y puede hacer) al respecto depende en parte de la falla de asignación.
Ser verdaderamente sin memoria es catastrófico. A menos que haya hecho un plan cuidadoso para esto, probablemente no haya nada que pueda hacer. (Por ejemplo, podría haber preasignado todos los recursos que necesitaría para guardar y cerrar la emergencia).
Pero muchas fallas de asignación no tienen nada que ver con la falta de memoria. La fragmentación puede hacer que falle una asignación porque no hay suficiente espacio contiguo disponible, aunque hay mucha memoria libre. La pregunta específicamente decía "estructura pequeña", por lo que probablemente sea tan mala como la verdadera condición de falta de memoria. (Pero el código cambia constantemente. ¿Qué es una estructura pequeña hoy podría ser un monstruo mañana. Y si es tan pequeño, realmente necesitas memoria del montón o puedes obtenerla de la pila?)
En un multi mundo enmarañado, las fallas de asignación a menudo son condiciones transitorias. Su asignación modesta podría fallar en este microsegundo, pero tal vez un hilo que acapara la memoria está a punto de liberar un gran búfer. Entonces, una estrategia de recuperación podría implicar un retraso y volver a intentarlo.
Cómo (y si) maneja la falla de asignación también puede depender del tipo de aplicación. Si está escribiendo un editor de documentos complejo, y un bloqueo significa perder el trabajo del usuario, entonces vale la pena gastar más esfuerzo para manejar estas fallas. Si su aplicación es transaccional y cada cambio se aplica incrementalmente al almacenamiento persistente, un bloqueo es solo un inconveniente menor para el usuario. Aun así, se debe considerar la tala. Si su aplicación recibe fallas de asignación rutinariamente, es probable que tenga un error y necesitará que los registros lo sepan y lo rastreen.
Por último, debes pensar en probar. Las fallas de asignación son poco frecuentes, por lo que la probabilidad de que se haya aplicado el código de recuperación en las pruebas es infinitamente pequeña, a menos que haya tomado medidas para garantizar la cobertura de las pruebas mediante el forzamiento artificial de las fallas. Si no va a probar su código de recuperación, probablemente no valga la pena escribirlo.
Mejores prácticas significa fuerza y estabilidad para todos los sistemas. Aplicarlos depende de nosotros. – lsalamon
Encontré una pregunta relacionada (Me gusta la contribución de Reed Copsey): http://stackoverflow.com/questions/691402/do-you-still-trap-memory-allocation-failures-in-your-c-program – jldupont