incomprehension delete / utilisation memoire
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:
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:
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.