为什么我释放后使用的内存仍然很大?

时间:2017-09-15 05:55:59

标签: c memory memory-management memory-leaks

我有一个c代码项目,它将不断malloc/free内存。

因为我不能在这里发布所有代码,所以我将代码简化为

  1. 启动它并获得CLI
  2. 在CLI中输入
  3. ,输入start
  4. 它将启动进程(malloc内存,分析数据,将数据存储到内存中)
  5. 返回CLI,因此用户可以键入get stats,类似这样
  6. 如果用户输入stop,它将free以前分配的所有内存。
  7. 我使用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?

    然后我打开了另一个终端并运行了第二个clistart,过了一会儿,第一个cli进程被杀了。

    我正在使用centos7,gcc版本4.8.5 20150623(Red Hat 4.8.5-11)(GCC),标准malloc/free

0 个答案:

没有答案