例如,在javascript中
我可以说
var x = 5;
稍后我可以做
x = 'a';
然后
x = "hello";
那么,如何为变量分配内存?实际上,所有变量都有一个共同类型'var',变量值可以在运行时改变,如上所示。为这些变量分配和管理内存不是一项艰巨的任务吗?确切地说,它是如何完成的?
答案 0 :(得分:3)
Python使用一种名为reference counting的技术,它基本上将一个计数器放入值中。每次创建对值的引用时,计数器都会递增。当对值的引用丢失时(例如,当您为“x”分配新值时),该值将减少。当计数器达到零时,这意味着不存在对该值的引用,并且可以将其解除分配。这是一个简化的解释,但这至少是基础。
答案 1 :(得分:1)
也许这个link提供了更多的洞察力,至少在javascript方面。
答案 2 :(得分:0)
那么,那些变量是对在编译时分配的不可变字符串的引用。
当然它取决于VM,但总的来说,我认为,大多数基于C语言的脚本语言会分配一大块内存,根据需要进行扩展,并在其中进行自己的分配,很少有任何回馈O / S.特别是在词法范围内的语言中,几乎所有变量都是在这个块中动态分配的,而不是类似于C栈的任何东西,并且它们可以通过引用计数或垃圾收集器来释放。
如果您的脚本语言在JVM,.NET或类似的东西上运行(Parrot?),那么创建变量只是创建类似Java对象的东西。在没有对该对象的更多引用之后的一段时间,垃圾收集器将回收内存。