例如,如果我声明变量a=8
:
答案 0 :(得分:5)
Bash变量,如
a=8
存储为堆内存,除非用户明确unset
变量,否则永远不会删除它们 - 所以实际上如果用户需要删除,用户有责任删除它。
在bash 2.05中,变量通过哈希表进行内部管理,哈希表的内存由“malloc”和“free”获取并释放。从哈希表中删除元素不会立即从哈希表中删除该元素,但会通过在执行中的关键点调用的垃圾收集flush_hash_table
进行清理。
Bash version 4.4重写了一些哈希表,flush_hash_table
不再存在,但被函数hash_flush
取代。
因此,不同的版本和端口可能会有不同的行为,您不应该依赖于内存实际上是立即释放,即使您执行unset
,或者在编写shell脚本时期望任何特定的内存行为
答案 1 :(得分:2)
内存管理并不是您需要关注的任何shell语言。可以这么说,bash
负责分配和释放所使用的任何内存。
所有解释语言都将它们的变量存储在堆上;即使他们使用堆栈,也可以在解释器的堆上动态分配。