Problème allocation mémoire
Bonjour à tous,
Je travaille sur un gros programme (sous Linux) qui alloue régulièrement (via new) des arrays de double d'environ 6 Mo (donc a priori pas rédhibitoires), et qui, après un certain temps de fonctionnement, me renvoyait une exception bad_alloc. J'ai donc géré l'exception via catch... throw, en retentant l'allocation mémoire jusqu'à ce qu'elle réussisse. Ca ressemble à ça.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| bool allocation_success = false;
while (!allocation_success)
{
cerr << "Node::allocate_buffer | Allocating " << msg.total_size << " bytes" << endl;
try
{
msg.root = new char[msg.total_size];
if( msg.root )
{
allocation_success = true;
cerr << "Allocation done." << endl;
}
else
cerr << "Allocation failed ! Attempting again !" << endl;
}
catch (std::bad_alloc & e)
{
cerr << " Allocation failed ! Bad alloc received !" << std::endl;
}
catch(...)
{
cerr << " Allocation failed ! Standard notification." << std::endl;
}
} |
Mon problème, donc : quand il n'arrive pas à faire l'allocation, il boucle en permanence, ce qui donne
Code:
1 2 3 4
| Node::allocate_buffer | Allocating 6400024 bytes
Allocation failed ! Bad alloc received !
Node::allocate_buffer | Allocating 6400024 bytes
Allocation failed ! Bad alloc received ! |
ad libitum...
L'état de ma mémoire à ce moment-là : sur 2 Go, 0.7 Go utilisés par le programme, 0.1 Go par le système, et 1.2 Go en cache. Et quasi zéro libre. Tout se passe donc comme si le prog n'arrivait pas à libérer le cache pour allouer mon vecteur.
Voili voilou, je rame un peu et ne maîtrise pas encore bien la gestion mémoire, donc toute idée sur la cause de ce problème me serait d'une aide incomparablement kikoololfuntop. :?
Bonne journée, et merci à ceux qui prendront le temps de me répondre ! :wink: Enjoy the day...