为什么 bash 在使用完未命名变量后不释放它们的内存?

问题描述 投票:0回答:1

考虑这种情况:

$ 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,然后结束那个孩子,我很好奇为什么会发生这种情况。

bash memory
1个回答
0
投票

这是为什么?

正如 Keith Thompson 所评论的,通常

malloc
会调用
brk
bsbrk
扩展进程内存,但
free
只会“标记”
malloc
中的内存以便在同一进程中重用。

有没有一种方法可以在不退出 bash 的情况下释放内存?

您可以编写一个将调用

malloc_trim()
的 Bash 内置函数(也可以使用
mallopt
调用
M_TRIM_THRESHOLD
以降低释放内存的阈值),编译该内置函数并在 Bash shell 中调用它。

© www.soinside.com 2019 - 2024. All rights reserved.