Разница между динамической загрузкой и динамическим связыванием

В чем основное различие между динамической загрузкой и динамическим связыванием в c ++?

а почему динамическая загрузка называется статической?

0

Решение

Есть несколько аспектов этого вопроса. Если мы говорим об объектах, мы говорим о динамическом связывании. Давайте рассмотрим следующую ситуацию

class Base {
public:
virtual void method() { std::cout << "Base::method" << std::endl; }
};

class Derived : public Base {
public:
virtual void method() { std::cout << "Derived::method" << std::endl; }
};

// ....

void testMethod(Base* pBase) {
pBase->method();
}

Вызов функции еще не известен во время компиляции, это может быть Base :: method или Derived :: method, в зависимости от типа времени выполнения pBase. Вот почему это называется dyanmic привязкой (или поздним связыванием), фактический вызов метода ищется, когда вызов фактически должен произойти.

С другой стороны у нас динамическая и статическая нагрузка. Это связано с загрузкой библиотек. Одна из возможностей — создать статическую библиотеку — файл с объектным кодом, который будет связан с вашей программой, когда компилятор компилирует и связывает ее. Он не может быть изменен после компиляции, так как его — и отсюда и название — статически привязан к вашей программе.

Однако, если вы собираетесь использовать динамическую загрузку, а не добавлять код в программу во время компиляции, вы загружаете ее во время выполнения. Различные операционные системы предлагают различные методы для этого. Для пользователей Windows файлы DLL не должны быть чем-то неизвестным. Они содержат объектный код, и когда программа запрашивает код, она загружает DLL, которая предоставляет код, и выполняет этот код. Это позволяет вам добавить другую версию DLL без необходимости перекомпиляции вашей программы (при условии, что сигнатура и общее поведение остаются неизменными) — мы можем сказать, что она динамическая.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector