Это хороший вопрос.
В то время, как объект представляет собой функции и данные, как быть размещены в том же самом месте, теоретически, большинство реализаций разделить его. То, как вы это делаете, заключается в том, что код разделяется и сохраняется в сегменте RO. Затем объект в области RW имеет возможность ссылаться на этот код в области RO. Сочетание кода и данных используется концептуально человеческим программистом и контролером типов, чтобы гарантировать, что вы не нарушаете правил и принципов.
Язык Java/C#, как правило, будет создан таким образом, чтобы каждый объект имел тег , определяющий тип объекта. Сам объект представляет собой просто структуру, содержащую все поля, выложенные в заданном порядке. Затем этот тег можно использовать для поиска функции, которую вы хотите вызвать в зоне RO.Функция в области RO изменена, чтобы принять дополнительный параметр, который называется или self, через который может быть достигнуто содержимое указанного объекта. Когда метод должен ссылаться на поля, он знает заранее заданный порядок, поэтому он может выполнять эту корреляцию. Обратите внимание, что для решения наследования нужны некоторые трюки, но это суть идеи.
Python/Ruby-like язык обычно делает объект хеш-таблицей, где метод является указателем на код в области RO (при условии, что язык компилируется и не запускается через интерпретатор байт-кода) , Вызов функций производится путем поиска содержимого хеш-таблицы и последующего указателя кода. Поля также отображаются в одной и той же таблице.
С этими основами, большинство реализаций делают трюки, чтобы избежать части, где указатель используется для поиска функции для вызова. Они пытаются выяснить и сузить возможный вызов одной функции. Затем они могут заменить поиск прямым вызовом правой функции, гораздо более быстрым решением.
the tl; dr версия: язык семантика виды и методы как часть объекта. Реализация разделяет их на сегменты RO и RW. Как таковая поддержка ОС не требуется.
Это зависит от языка, а тем более, от времени выполнения указанного языка. Текущая среда CLR может создавать объекты в стеке (типы значений в большинстве случаев, если они не подняты). Ни OOP, ни «prodcedural» не говорят ничего, что связано с использованием «секции данных», но только в режиме «чтение» только в режиме «только для чтения». Окончание настолько запутано, что я даже не уверен, как ответить. Я думаю, проблема состоит в том, чтобы решить 40 вопросов как один. Сосредоточьтесь на одной вещи за раз. – 2010-11-07 22:51:33