Вопрос о новичке: Что связывает?

Я пытался понять, что различие между ранним и поздним связыванием, и в процессе поняло, что понятие привязки туманно мне. Я думаю, что понимаю, что это касается пути data-as-a-word-of-memory, связан с type-as-a-set-of-language-features, но я не уверен, что это - правильные понятия. Кроме того, как делает понимание, что это глубоко помогает людям стать лучшими программистами?

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

Спасибо,

JDelage

16
задан JDelage 23 April 2010 в 13:19
поделиться

5 ответов

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

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

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

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

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

1
ответ дан 30 November 2019 в 23:14
поделиться

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

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

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

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

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

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

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

2
ответ дан 30 November 2019 в 23:14
поделиться

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

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

4
ответ дан 30 November 2019 в 23:14
поделиться

«Связывание» в основном означает, что «это имя функции / свойства соответствует этому биту кода».

2
ответ дан 30 November 2019 в 23:14
поделиться

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

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

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

1
ответ дан 30 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: