Fake Memory Leak - Vector
我們使用 vector 來 create list,然後最後 clear 清掉 vector's elements,可是最後發現 process 卻沒有 free memory。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <vector>
using namespace std;
int main(int argc, char **argv) {
vector<int> v;
malloc_stats();
printf("===================================\n");
int arg = strtol(argv[1], NULL, 10);
for (int i = 0; i < 1000000;i++) {
for (int j = 0; j < arg;j++) {
v.push_back(i);
}
}
printf("%d, %d\n", v.size(), arg);
v.clear();
sleep (1);
malloc_stats();
getchar();
}
~# ./test_malloc 30
Arena 0:
system bytes = 151552
in use bytes = 20232
Total (incl. mmap):
system bytes = 151552
in use bytes = 20232
max mmap regions = 0
max mmap bytes = 0
===================================
30000000, 30
Arena 0:
system bytes = 155648
in use bytes = 24336
Total (incl. mmap):
system bytes = 134377472
in use bytes = 134246160
max mmap regions = 2
max mmap bytes = 201334784
~# cat /proc/17520/status | grep -i vm
VmPeak: 200592 kB
VmSize: 135052 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 129672 kB
VmRSS: 99124 kB
VmData: 131264 kB
VmStk: 132 kB
VmExe: 12 kB
VmLib: 3324 kB
VmPTE: 130 kB
VmSwap: 19180 kB
* VmPeak: Peak virtual memory size.
* VmSize: Virtual memory size.
* VmLck: Locked memory size (see mlock(3)).
* VmHWM: Peak resident set size ("high water mark").
* VmRSS: Resident set size.
* VmData, VmStk, VmExe: Size of data, stack, and text segments.