2013-04-02 2 views
1

В объектно-ориентированных языках программирования при определении переменной она становится ссылкой на объект. Переменная не является самим объектом и вместо этого указывает на объект, который несет значение, присвоенное этой переменной.Структура данных переменных/объектов в языках OO

Вопрос: как это работает так эффективно? Каков механизм того, как переменная присваивается объекту?

То, как я думаю об организации, является связанным списком, однако не нашел ссылок на то, как данные структурированы на таких языках, как Ruby или Java.

ответ

1

В объектно-ориентированных языках программирования при определении переменной она становится ссылкой на объект.

Это не всегда так. Например, C++ можно рассматривать как объектно-ориентированный язык, но пользователь языка может использовать переменную как ссылку/указатель или явно как значение.

Тем не менее, вы правы в том, что некоторые (обычно более высокоуровневые) языки OO неявно используют ссылки, так что пользователю языка не нужно беспокоиться об этих «деталях» реализации производительности в отношении производительности. Вместо этого они пытаются взять на себя ответственность за это.

Как это работает так эффективно? Каков механизм того, как переменная присваивается объекту?

Рассмотрим простой пример. Что происходит, когда объект передается как параметр функции? Копия этого объекта должна быть сделана так, чтобы функция могла ссылаться на этот объект локально. Для языка OO, который неявно использует ссылки, необходимо копировать только адрес объекта, тогда как для истинного пропущенного значения потребуется копия полного содержимого памяти объекта, которая потенциально может быть очень большой (подумайте о коллекции предметов или тому подобное).

Подробное объяснение этого включает вхождение в кишки сборки. Например, почему копия объекта на вызов функции даже должна быть сделана в первую очередь? Почему косвенность адреса не занимает больше времени, чем прямое значение? Etc.

Связанные

What's the difference between passing by reference vs. passing by value?