Вопрос новичка: что является обязательным? - PullRequest
15 голосов
/ 23 апреля 2010

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

Пожалуйста, обратите внимание: этот вопрос не "что поздно, а раннее связывание" или "каковы компромиссы между двумя".Они уже существуют здесь.

Спасибо,

JDelage

Ответы [ 5 ]

4 голосов
/ 23 апреля 2010

В самом простом случае привязка - это ассоциация символа в программе с адресом в памяти.

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

2 голосов
/ 23 апреля 2010

В контексте компиляторов привязка - это фаза, на которой ссылки на адреса изменяются на фактические абсолютные адреса.

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

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

Однако на рабочих станциях, таких как ПК, программа можетбыть загружены на любой адрес, поэтому адрес не известен во время ссылки.Поэтому дополнительная информация о перемещении сохраняется в файле программы, так что загрузчик может связывать адреса во время загрузки.

Связывание выполняется во время загрузки с использованием информации о перемещении.Когда известен адрес, по которому будет запускаться программа, загрузчик заменяет относительные адреса абсолютными адресами, используя информацию о перемещении, которая сообщает, где в коде необходимо внести изменения.

Для динамических объектов /Переменные, привязка может быть сделано в время выполнения .(Я думаю, это то, что обычно называют поздним связыванием.)

Обычно вам не нужно сильно заботиться о связывании, по крайней мере, когда используется раннее связывание.(Однако привязка во время выполнения может отрицательно повлиять на производительность и безопасность.)

2 голосов
/ 23 апреля 2010

«Привязка» в основном говорит «это имя функции / свойства соответствует этому биту кода».

1 голос
/ 24 апреля 2010

В общем случае связывание - это ассоциирование имени с каким-либо значением.Значение не обязательно должно быть данными, но может быть любым именем, например функцией или классом.

Что касается компромисса:

  • Раннее связывание делает значение доступнымранее.Так, например, компиляторы могут применять оптимизацию на основе известного значения, например, оценку константных выражений.Это может привести к повышению производительности и не требует поддержки времени выполнения для извлечения значения.

  • Позднее связывание требует значения позже, что обеспечивает большую гибкость.Становится легче изменить части кода или перенастроить систему.

Общая тенденция заключается в более позднем связывании, потому что с более быстрыми процессорами и лучшими методами (например, JIT-компиляцией) это становится возможным болеечасто.

1 голос
/ 23 апреля 2010

Если вы говорите больше о связывании данных, то я бы сказал, что определение, используемое Microsoft в их Обзоре связывания данных , работает довольно хорошо:

"Привязка данных - это процесс, который устанавливает связь между Пользовательский интерфейс и бизнес-логика. Если привязка имеет правильные настройки и данные обеспечивают надлежащее уведомления, тогда, когда данные меняет свое значение, элементы, которые привязаны к данным отражают изменения автоматически. Привязка данных также может означает, что если внешнее представление изменения данных в элементе тогда основные данные могут быть автоматически обновляется, чтобы отразить менять. Например, если пользователь редактирует значение в элементе TextBox, то базовое значение данных автоматически обновлен, чтобы отразить это изменение. "

Другими словами, это способ получения данных из источника данных (например, базы данных или файла XML) и применения этих данных к интерфейсу или элементу отображения. Например, форма может иметь раскрывающийся список значений, которые хранятся в таблице в базе данных. Привязка данных - это процесс «привязки» значений из базы данных к списку. Односторонняя привязка данных обычно доступна только для чтения, но двусторонняя привязка данных позволяет пользователю обновлять значения до базового источника данных.

...