Bonjour à tous,
J'essaye de jouer avec le fast_pool_allocator de boost pour éviter des problème de fractionnement de mémoire en allouant plein de petits objets.
Cependant mon programme explose systématiquement en mémoire.
Voici un exemple qui met en évidence mon problème :
dans cet exemple le total de mémoire utilisé devrait être de 1Go or il en consomme 2....
Si je retire les surcharges d’opérateur "new" et "delete", le programme monte bien à uniquement 1 Go
Qu'est ce que je fais de mal ?
Merci de votre aide.
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
25
26
27
28
29
30 #define BOOST_POOL_INSTRUMENT #include <boost/pool/pool_alloc.hpp> #include <cstdio> int nbAlloc = 0; class Object { private: char data[1024]; public: Object() { nbAlloc++; } static void * operator new(size_t size) { return boost::fast_pool_allocator<Object>::allocate();} static void operator delete(void * ptr) { boost::fast_pool_allocator<Object>::deallocate(reinterpret_cast<Object*>(ptr)); } }; #define NB_ALLOC 1024*1024 int main() { for(int i = 0; i < NB_ALLOC; ++i) { new Object(); } printf("Nb Allocated = %d\n", nbAlloc); getchar(); return 0; }
Partager