1

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

4

2 回答 2

4

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

于 2009-05-05T21:58:12.623 回答
1

当然,答案因语言而异——托管的动态语言和较低级别的实现语言。适用于 Perl 的内容不一定适用于 Python,适用于 Tcl 的内容也不一定适用于 Java 或 LISP 或......好吧,它们是否算作动态语言。

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

于 2009-05-05T22:34:16.173 回答