2009-05-05 49 views
1

动态语言如何决定为变量分配多少内存? 例如。编译器如何在没有太多内存开销的情况下将variable = 5更改为variable =“xxx”?它什么时候使用硬件堆栈?它何时使用内存堆?动态语言和变量分配

回答

4

编译器为每个变量分配足够的内存来存放指针加上语言运行库需要的任何元数据。但我认为你的意思是询问为每个对象分配了多少内存。在这种情况下,答案是它取决于对象的类型。当一个变量被赋值给一个不同的对象时,与该变量相关的指针会改变它指向的内容。

1

当然,答案因语言而异 - 托管动态语言和低级实现语言。这适用于Perl并不一定适用于Python,也不适用于Tcl适用于Java或LISP或......它们是否被视为动态语言。

在Perl中,有一个名为SV(标量变量)的C级结构,其中包含不同版本的变量值的不同存储。这些往往是以堆为基础的;字符串的存储总是以堆为基础,尽管从未转换为字符串的纯数字值可能在严格在堆栈中的SV中。在Perl中,这些东西都是引用计数的(并且是mortalized,或永久化的,以及各种其他有趣的术语)。更复杂的类型(AV,HV,RV等)基于SV。