Bonjour,
J'ai une question qui me tracasse car je n'ai pas compris un truc concernant la gestion memoire en C++. Pour quoi avec ce programme la RAM disponible sur le système n'est pas restitué après les delete ?
RESULTAT
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
31
32
33
34
35
36
37
38
39
40
41 #include <iostream> #include <string> #include <vector> #include <sys/sysinfo.h> using namespace std; int main() { cout << "In main.\n"; struct sysinfo myinfos; sysinfo( & myinfos ); unsigned long prevfreeram = myinfos.freeram; std::vector<std::string*> strings; for ( unsigned e=0; e<10000000; e++ ) strings.push_back( new std::string( "test" ) ); sleep( 12 ); sysinfo( & myinfos ); unsigned long duringfreeram = myinfos.freeram; std::cout << "perte du free = " << prevfreeram - duringfreeram << std::endl; strings.clear(); for ( std::vector<std::string*>::iterator it = strings.begin(); it != strings.end(); it++ ) delete( *it ); sleep( 7 ); sysinfo( & myinfos ); unsigned long afterfreeram = myinfos.freeram; std::cout << "recup du free = " << afterfreeram - duringfreeram << std::endl; std::cout << prevfreeram << " " << duringfreeram << " " << afterfreeram << std::endl; }
> ./a.out
OK cela concerne l'ensemble des process du système mais la taille que j'alloue reste negligeable par rapport à d'autres allocations eventuelles du système pendant ce temps court.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 In main. perte du free = 882229248 recup du free = 253952 6703034368 5820805120 5821059072
Je suis sur linux et le top également me renvoie la même chose pour le process concerné.
Merci beaucoup d'avance.
Partager