J'ai vu (dans la libpng, par exemple), l'utilisation de setjmp/longjmp pour implémenter un truc qui ressemble à des exceptions. Ça permet de tenter de "rembobiner" l'état du programmer comme il était au début de l'opération qui a échoué. Mais bon, c'est pas terrible.
Quand un malloc échoue, la moindre des choses, c'est de logger un truc avant d'exploser en vol. Parce qu'un programme qui s'arrête d'un coup sans prévenir et sans aucun message, ça fait pas sérieux.
Mon point de vue en Java puisque la question a été posée: le langage Java prévoit une exception OutOfMemoryError. Le programme peut essayer de la catcher, mais s'il ne le fait pas, ça remonte tout en haut et ça quitte le thread en cours (et ça tue la VM avec si c'était le main thread).
Mon point de vue de codeur embarqué: là normalement le système est dimensionné comme il faut, si le malloc marche pas, c'est qu'il y a un problème de design. On met un message dans les logs, et on reboote tout le machin pour voir si ça marche mieux après (ou alors, en mode debug, on arrête tout et on préserve l'état pour que quelqu'un puisse venir investiguer).
# Exceptions
Posté par pulkomandy (site web personnel, Mastodon) . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 6.
J'ai vu (dans la libpng, par exemple), l'utilisation de setjmp/longjmp pour implémenter un truc qui ressemble à des exceptions. Ça permet de tenter de "rembobiner" l'état du programmer comme il était au début de l'opération qui a échoué. Mais bon, c'est pas terrible.
Quand un malloc échoue, la moindre des choses, c'est de logger un truc avant d'exploser en vol. Parce qu'un programme qui s'arrête d'un coup sans prévenir et sans aucun message, ça fait pas sérieux.
Mon point de vue en Java puisque la question a été posée: le langage Java prévoit une exception OutOfMemoryError. Le programme peut essayer de la catcher, mais s'il ne le fait pas, ça remonte tout en haut et ça quitte le thread en cours (et ça tue la VM avec si c'était le main thread).
Mon point de vue de codeur embarqué: là normalement le système est dimensionné comme il faut, si le malloc marche pas, c'est qu'il y a un problème de design. On met un message dans les logs, et on reboote tout le machin pour voir si ça marche mieux après (ou alors, en mode debug, on arrête tout et on préserve l'état pour que quelqu'un puisse venir investiguer).