Bash如何管理自己的记忆?

时间:2017-01-08 20:55:31

标签: bash memory-management

例如,如果我声明变量a=8

  • 它存放在哪里?在运行进程堆?
  • 什么时候免费?
  • 谁对此负责?

2 个答案:

答案 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负责分配和释放所使用的任何内存。

所有解释语言都将它们的变量存储在堆上;即使他们使用堆栈,也可以在解释器的堆上动态分配。