Динамические языки и распределение переменных - PullRequest
1 голос
/ 06 мая 2009

Как динамический язык решает, сколько памяти выделить для переменной? например. Как компилятор меняет переменную = 5 на переменную = "ххх" без чрезмерных затрат памяти? Когда он использует аппаратный стек и когда он использует кучу памяти?

Ответы [ 2 ]

4 голосов
/ 06 мая 2009

Компилятор выделяет достаточно памяти для каждой переменной для хранения указателя и любых метаданных, требуемых для среды выполнения языка. Но я думаю, что вы хотите спросить, сколько памяти выделено для каждого объекта . В этом случае ответ заключается в том, что это зависит от типа объекта. Когда переменная присваивается другому объекту, указатель, связанный с этой переменной, меняет то, на что он указывает.

1 голос
/ 06 мая 2009

Ответ, конечно же, зависит от языка - как размещенного динамического языка, так и языка реализации более низкого уровня. То, что применимо к Perl, не обязательно применимо к Python, и то, что применимо к Tcl, не применимо к Java или LISP или ... ну, они считаются динамическими языками.

В Perl есть структура уровня C, которая называется SV (скалярная переменная) и содержит разные хранилища для разных версий значения переменной. Они часто основаны на куче; хранилище для строк всегда заканчивается кучей, хотя чистое числовое значение, которое никогда не преобразовывалось в строку, может быть в SV, который находится строго в стеке. В Perl эти вещи считаются ссылками (и смертными, или бессмертными, и всякими другими интересными терминами). Более сложные типы (AV, HV, RV и т. Д.) Основаны на SV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...