Разница между статическим и динамическим связыванием

Автор: Laura McKinney
Дата создания: 1 Апрель 2021
Дата обновления: 1 Июль 2024
Anonim
Раннее и Позднее Связывание
Видео: Раннее и Позднее Связывание

Содержание


Связывание ассоциации «определения функции» с «вызовом функции» или ассоциации «значения» с «переменной» называется «привязкой». Во время компиляции каждому «определению функции» присваивается адрес памяти; как только вызов функции выполнен, управление выполнением программы перемещается по этому адресу памяти и получает код функции, сохраненный в этом месте выполнения, это связывание «вызова функции» с «определением функции». Связывание можно классифицировать как «статическое связывание» и «динамическое связывание».

Если до выполнения уже известно, какая функция будет вызвана или какое значение выделено для переменной, то это «статическая привязка». если он узнает во время выполнения, он называется «динамическое связывание».

  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. Вывод

Сравнительная таблица:

Основа для сравненияСтатическое связываниеДинамическое связывание
Событие ПроисшествиеСобытия происходят во время компиляции "Статическое связывание".
События происходят во время выполнения «Динамическое связывание».
ИнформацияВся информация, необходимая для вызова функции, известна во время компиляции.Вся информация, необходимая для вызова функции, должна быть известна во время выполнения.
преимуществоЭффективность.Гибкость.
ВремяБыстрое исполнение.Медленное исполнение.
Альтернативное имяРаннее связывание.Позднее связывание.
примерПерегрузка вызова функции, перегруженные операторы.Виртуальная функция в C ++, переопределенные методы в Java.

Определения статического связывания

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


Статическое связывание делает программу очень эффективной, но она снижает гибкость программы, так как «значения переменной» и «вызов функции» предопределены в программе. Статическое связывание реализуется в программе во время кодирования.

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

Реализация статического связывания в C ++ с примером перегрузки

#включают использование пространства имен std; перегрузка класса {int a, b; public: int load (int x) {// функция первой загрузки (). а = х; cout << "Значение х есть" <функц (); // Приведенный выше оператор решает, какую функцию classs следует вызвать. р = & d1; // Значение указателя изменяется. п-> функц (); // Приведенный выше оператор решает, какую функцию classs следует вызвать. р = & d2; // Снова изменяется значение указателя. п-> функц (); // Приведенный выше оператор решает, какую функцию classs следует вызвать. вернуть 0; }

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


  1. События, которые происходят во время компиляции, например, код функции, связанный с вызовом функции или присвоением значения переменной, называются статическим / ранним связыванием. Напротив, когда эти задачи выполняются во время выполнения, они называются динамическим / поздним связыванием.
  2. «Эффективность» увеличивается в статическом связывании, так как все данные собираются перед выполнением. Но в динамическом связывании данные собираются во время выполнения, поэтому мы можем решить, какое значение назначить переменной и какую функцию вызывать во время выполнения, что делает выполнение «гибким».
  3. «Статическое связывание» делает выполнение программы «более быстрым», поскольку все данные, необходимые для выполнения программы, известны перед выполнением. В «динамическом связывании» данные, необходимые для выполнения программы, известны компилятору во время выполнения, которое требует времени для привязки значений к идентификаторам; следовательно, это замедляет выполнение программы.
  4. Статическое связывание также называется ранним связыванием, потому что код функции связан с вызовом функции во время компиляции, которая является более ранней, чем динамическое связывание, в котором код функции связан с вызовом функции во время выполнения, следовательно, это также называется поздним связыванием.

Вывод:

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