我有一个c代码项目,它将不断malloc/free
内存。
因为我不能在这里发布所有代码,所以我将代码简化为
start
get stats
,类似这样stop
,它将free
以前分配的所有内存。我使用valgrind来检查内存泄漏,并且没有内存泄漏。
令我困惑的是,在输入stop
后,程序使用的内存不会丢失。
这是一些日志
$ ./cli
> Welcome, type `help` to get full command list
在另一个终端
$ ps axuwww|grep cli; free -m
sato 6511 0.0 0.0 16016 2072 pts/2 S+ 13:48 0:00 ./cli
total used free shared buff/cache available
Mem: 3790 88 3615 1 86 3525
程序使用16KB内存
然后返回上一个终端,输入start
,完成后返回此终端并运行ps;free
sato 6511 30.3 91.8 4595828 3564516 pts/2 S+ 14:13 0:56 ./cli
total used free shared buffers cache available
Mem: 3790 3581 99 1 0 109 22
然后我键入stop
以释放所有内存,并使用gdb -p
附加进程,并验证数组,其已释放
和ps;free
在输出上方保持相同
我的问题是为什么它仍然使用3581
MB内存,而不是最初的16KB?
然后我打开了另一个终端并运行了第二个cli
和start
,过了一会儿,第一个cli
进程被杀了。
我正在使用centos7,gcc版本4.8.5 20150623(Red Hat 4.8.5-11)(GCC),标准malloc/free