J'ai une petite application que je courais en ce moment et je voulais vérifier si j'ai des fuites de mémoire dans ce si je mets dans ce morceau de code:Changements de contexte non volontaires: Comment puis-je les empêcher?
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");
}
}
Quand je courais l'application i cat'ed/proc // status pour voir si la mémoire augmente. La sortie est le suivant après environ 2 minutes d'autonomie:
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 a changé sauf le dernier, donc ne la moyenne, il n'y a pas de fuites de mémoire?
Mais ce qui est plus important et ce que je voudrais savoir est, s'il est mauvais que la dernière valeur augmente rapidement (environ 26475 commutateurs en environ 2 minutes!).
J'ai regardé d'autres applications pour comparer la quantité de commutateurs non volunary ils ont:
- Firefox: environ 200
- Gdm: 2
- Netbeans: 19
Ensuite, J'ai fait des recherches sur google et découvert des choses mais c'est technique à comprendre. Ce que j'ai obtenu de cela est que cela se produit lorsque l'application change le processeur ou quelque chose? (J'ai un processeur Amd 6-core btw).
Comment puis-je empêcher mon application de le faire et dans quelle mesure cela peut-il être un problème lors de l'exécution de l'application? Merci d'avance, Robin.
Puisque vous êtes probablement sur linux, pourquoi ne pas utiliser valgrind pour vous aider à trouver une fuite de mémoire possible? – Palmik
Je ne comprends pas pourquoi vous pensez que le code pourrait vous aider à vérifier les fuites de mémoire. – Ferruccio
Eh bien, je suppose que cela pourrait l'aider à trouver une fuite de mémoire dans le code qui alloue/détruit le flux de fichier d'entrée. –