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 ?
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;
}
RESULTAT

> ./a.out
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
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.

Je suis sur linux et le top également me renvoie la même chose pour le process concerné.

Merci beaucoup d'avance.