J'ai une petite application que je suis en train d'exécuter et je voulais vérifier s'il n'y avait pas de fuites de mémoire dans cette application :
for (unsigned int i = 0; i<10000; i++) {
for (unsigned int j = 0; j<10000; j++) {
std::ifstream &a = s->fhandle->open("test");
char temp[30];
a.getline(temp, 30);
s->fhandle->close("test");
}
}
Lorsque j'ai lancé l'application, j'ai cat'ed /proc//status pour voir si la mémoire augmente. La sortie est la suivante après environ 2 minutes d'exécution :
Name: origin-test
State: R (running)
Tgid: 7267
Pid: 7267
PPid: 6619
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDSize: 256
Groups: 4 20 24 46 110 111 119 122 1000
VmPeak: 183848 kB
VmSize: 118308 kB
VmLck: 0 kB
VmHWM: 5116 kB
VmRSS: 5116 kB
VmData: 9560 kB
VmStk: 136 kB
VmExe: 28 kB
VmLib: 11496 kB
VmPTE: 240 kB
VmSwap: 0 kB
Threads: 2
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000002004
SigCgt: 00000001800044c2
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: 3f
Cpus_allowed_list: 0-5
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 120
nonvoluntary_ctxt_switches: 26475
Aucune des valeurs n'a changé, sauf la dernière, ce qui signifie qu'il n'y a pas de fuite de mémoire ?
Mais ce qui est plus important et ce que j'aimerais savoir, c'est s'il est mauvais que la dernière valeur augmente rapidement (environ 26475 commutations en 2 minutes !).
J'ai regardé d'autres applications pour comparer le nombre d'interrupteurs non-volontaires dont elles disposent :
- Firefox : environ 200
- Gdm : 2
- Netbeans : 19
J'ai fait des recherches sur Internet et j'ai trouvé quelques trucs, mais c'est trop technique pour que je comprenne. Ce que j'en ai retenu, c'est que cela se produit lorsque l'application change de processeur ou quelque chose comme ça ? (J'ai un processeur Amd à 6 cœurs).
Comment puis-je empêcher mon application de faire cela et dans quelle mesure cela peut-il constituer un problème lors de l'exécution de l'application ?
Merci d'avance, Robin.