动态语言如何决定为变量分配多少内存? 例如。编译器如何在没有太多内存开销的情况下将variable = 5更改为variable =“xxx”?什么时候使用硬件堆栈,什么时候使用内存堆?
答案 0 :(得分:4)
编译器为每个变量分配足够的内存来保存指针以及语言运行时所需的任何元数据。但我认为你的意思是要问每个对象分配多少内存。在这种情况下,答案是它取决于对象的类型。当变量被分配给不同的对象时,与该变量关联的指针会改变它指向的内容。
答案 1 :(得分:1)
当然,答案因语言而异 - 托管动态语言和低级实现语言。适用于Perl的内容不一定适用于Python,也不适用于Tcl适用于Java或LISP,或者......它们是否算作动态语言。
在Perl中,有一个C级结构,其名称为SV(标量变量),包含不同版本变量值的不同存储空间。这些通常是基于堆的;字符串的存储总是以堆为基础,尽管从未转换为字符串的纯数值可能位于严格在堆栈中的SV中。在Perl中,这些东西都是引用计数(和凡人,或永生,以及各种其他有趣的术语)。更复杂的类型(AV,HV,RV等)基于SV。