2012-06-26 2 views
0

Необходимо, чтобы язык программирования сохранял информацию о классе (например, в Objective-C 2 байтах), чтобы знать «спецификацию» (например, Integer: 4 байта; String: 8 байт , ...) от object?
Из-за полиморфизма программа должна проверять во время выполнения, имеет ли объект правильный type (для методов; сообщения) правильно?
Расходует столько ресурсов? Главным образом потому, что вы создаете все больше и больше классов для того, чтобы поддерживать правильную структуру ...OOP в целом - Информация о классе в ОЗУ

ответ

1

Это абсолютно необходимо. Объект (т.е. ссылка) класса хранится в ОЗУ. Он использует очень маленькое нет. f bytes, поскольку он хранит только память адрес.

Проверка не выполняется во время выполнения, она выполняется во время компиляции. Это не вызывает дополнительного использования памяти. Создание классов, методов не увеличивает использование памяти, но (хотя бы немного) увеличивает время компиляции. Хранение данных (объекты/ссылки, числа, строки и т. Д.) Использует память. Только при создании объектов языковая машина выделяет и использует память.

+0

Но как узнать, как данные создаются за ссылкой? «Что-то» должно идентифицировать объект, будь то дополнительная информация о классе для объекта или всего пула классов. –

+0

Программа d не нуждается в знании. Компилятор проверял, что все в порядке, и нет неправильных вызовов методов или неправильных ссылок (или объектов) – vedant1811

0

Это абсолютно необходимо

No.

Например, по умолчанию, C++ не хранить информацию любого типа. Каждый объект просто хранит pointer to a table of function pointers, чтобы реализовать вызовы виртуальных функций.

В C++ по умолчанию вся проверка типов выполняется во время компиляции. Это только изменится, если вы начнете делать «интересные» вещи, такие как dynamic_cast, что требует проверки типа времени выполнения и, следовательно, введите информацию, которая будет храниться в объектах.

+1

НО: Он сохраняет «что-то», которое идентифицирует объект ... –

+0

@LucaNateMahler: Да, но не в том смысле, о котором спрашивал ваш вопрос; он не используется для «проверки во время выполнения, имеет ли объект правильный тип». –

+0

Итак, мы можем сказать, что ООП тратит больше памяти, чем языки с примитивами? –

Смежные вопросы