У меня есть небольшое приложение, которое я запускал прямо сейчас, и я хотел проверить, нет ли в нем утечек памяти, поэтому я вставил этот фрагмент кода:
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");
}
}
Когда я запустил приложение, я cat 'ed / proc // статус, чтобы увидеть, увеличивается ли память.Примерно через 2 минуты работы выдается следующее:
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
Ни одно из значений не изменилось, кроме последнего, так значит ли это, что нет утечек памяти?
Но чтоболее важно и что я хотел бы знать, если плохо, что последнее значение быстро увеличивается (около 26475 переключается за 2 минуты!).
Я посмотрел на некоторые другие приложения, чтобы сравнить, сколько не-волунные переключатели у них есть:
- Firefox: около 200
- Gdm: 2
- Netbeans: 19
Тогда я гуглил ивыяснил кое-что, но это для меня техническое.Что я получил от этого, что это происходит, когда приложение переключает процессор или что-то?(У меня есть 6-ядерный процессор Amd между прочим).
Как я могу предотвратить это в моем приложении и насколько это может быть проблемой при запуске приложения?
Заранее спасибоРобин.