如何在脚本语言中为变量完成内存分配?

时间:2009-02-24 15:14:45

标签: javascript memory-management scripting variables

例如,在javascript中

我可以说

var x = 5;

稍后我可以做

x = 'a';

然后

x = "hello";

那么,如何为变量分配内存?实际上,所有变量都有一个共同类型'var',变量值可以在运行时改变,如上所示。为这些变量分配和管理内存不是一项艰巨的任务吗?确切地说,它是如何完成的?

3 个答案:

答案 0 :(得分:3)

Python使用一种名为reference counting的技术,它基本上将一个计数器放入值中。每次创建对值的引用时,计数器都会递增。当对值的引用丢失时(例如,当您为“x”分配新值时),该值将减少。当计数器达到零时,这意味着不存在对该值的引用,并且可以将其解除分配。这是一个简化的解释,但这至少是基础。

答案 1 :(得分:1)

也许这个link提供了更多的洞察力,至少在javascript方面。

答案 2 :(得分:0)

那么,那些变量是对在编译时分配的不可变字符串的引用。

当然它取决于VM,但总的来说,我认为,大多数基于C语言的脚本语言会分配一大块内存,根据需要进行扩展,并在其中进行自己的分配,很少有任何回馈O / S.特别是在词法范围内的语言中,几乎所有变量都是在这个块中动态分配的,而不是类似于C栈的任何东西,并且它们可以通过引用计数或垃圾收集器来释放。

如果您的脚本语言在JVM,.NET或类似的东西上运行(Parrot?),那么创建变量只是创建类似Java对象的东西。在没有对该对象的更多引用之后的一段时间,垃圾收集器将回收内存。