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.
Mon problème, donc : quand il n'arrive pas à faire l'allocation, il boucle en permanence, ce qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }ad libitum...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 !
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 ! Enjoy the day...
Partager