• [^] # Re: Approche hybride

    Posté par . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 2.

    Et d'ailleurs comment allouer de la mémoire pour des strings, ui, etc s'il n'y en a plus ?

    Un autre message donne la solution : on peut préallouer le message ou les structures nécessaires. Ainsi, en Python, un certain nombre d'instances de l'exception MemoryError sont préallouées, de façon à ce qu'on puisse lever l'exception sans partir en vrille.

    Par ailleurs, je pense que « le système est déjà gelé » est une simplification abusive. Il n'y a pas un allocateur global, mais chaque processus a son allocateur qui peut conserver de la mémoire disponible (déjà allouée du point de vue du noyau, mais libre du point de vue de l'application faisant appel à malloc()). Cela arrive notamment si le tas est fragmenté. En fonction des heuristiques utilisées, un allocateur peut garder beaucoup de mémoire disponible qui ne sera pas allouable par d'autres processus.

    Ainsi, ce n'est pas parce qu'un processus échoue à allouer même une petite zone mémoire que les autres processus ne sont pas en mesure de continuer à fonctionner.