Bash如何管理其内存?

9
例如,如果我声明一个变量 a=8:
  • 它存储在哪里?在运行进程的堆中吗?
  • 它什么时候被释放?
  • 谁负责这个?
2个回答

9
Bash变量,比如:
a=8

堆内存中存储的变量在用户没有显式地删除该变量之前不会被删除,因此如果需要删除,用户需要自己负责。

Bash 2.05使用哈希表来管理变量,哈希表的内存是通过"malloc"和"free"获取和释放的。从哈希表中删除元素并不会立即将其从哈希表中移除,而是在执行的关键点通过垃圾回收flush_hash_table进行清理。

Bash 版本4.4重新编写了一些哈希表,flush_hash_table不再存在,但被函数hash_flush所替代。

因此,不同版本和端口的行为可能不同,不能指望即使使用unset也能立即释放内存,也不能期望在编写shell脚本时有任何特定的内存行为。


3

在任何shell语言中,您无需关心内存管理。可以说,bash负责分配和释放使用的所有内存。

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


1
@ManoMini,想要对自己的问题回答进行负评是不好的……至少这个答案并不是“错误”的。 - Jean-François Fabre
2
@Jean-FrançoisFabre——这不是回答问题,相当于说“这些不是你要找的机器人”。 - Soren
1
我只是想指出OP很少像那样具有攻击性地回答。"如果我有一把枪,我会射死你"可能是下一步 :) 显然,OP缺乏对这个网站的经验。这就是为什么downvote rep存在的原因(在我看来不够高)。 - Jean-François Fabre
事实上,像所有解释型语言一样,“bash”真正只有一个地方可以存储任何东西:堆。 - chepner
2
这仍然不是问题的答案 - 为什么您认为OP是将其投票降低的人? - Soren
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接