考虑这种情况:
$ ps -p $$ -o %mem
%MEM
0.0
$ echo $(head -c200M /dev/urandom) > /dev/null
# command finishes but memory hasn't been released:
$ ps -p $$ -o %mem
%MEM
7.4
退出 bash 的那一刻,我可以看到内存立即被释放。为什么是这样?还有,有没有一种方法可以在不退出 bash 的情况下释放内存?并不是说我真的需要这样做,因为我可以只分叉 bash,然后结束那个孩子,我很好奇为什么会发生这种情况。
这是为什么?
正如 Keith Thompson 所评论的,通常
malloc
会调用 brk
或 bsbrk
扩展进程内存,但 free
只会“标记” malloc
中的内存以便在同一进程中重用。
有没有一种方法可以在不退出 bash 的情况下释放内存?
您可以编写一个将调用
malloc_trim()
的 Bash 内置函数(也可以使用 mallopt
调用 M_TRIM_THRESHOLD
以降低释放内存的阈值),编译该内置函数并在 Bash shell 中调用它。