我有一个小应用程序正在运行,我想检查是否存在任何内存泄漏,因此我添加了以下代码:
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命令读取/proc/<进程ID>/status文件以查看内存是否增加。 大约经过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
最后一个值是唯一变化的,这意味着没有内存泄漏吗?
但更重要的是,我想知道的是,最后一个值快速增加(大约2分钟内增加了约26475次),是否不好。
我查看了一些其他应用程序,以比较它们的非自愿切换次数:
- Firefox:约200
- Gdm:2
- Netbeans:19
然后我搜索并发现了一些东西,但对我来说太过技术化无法理解。
从中我得到的是,这是应用程序切换处理器或其他什么东西所导致的? (顺便说一句,我有一个Amd 6核处理器)。
如何防止我的应用程序这样做,并在运行应用程序时这可能造成多大问题?
提前谢谢,Robin。