Cтраница 1
Динамическое связывание позволяет независимым дистрибьютерам программного обеспечения распространять свою продукцию, не выдавая фирменных секретов. Распространяемое программное обеспечение может состоять только из заголовочных и объектных файлов. Чтобы не раскрывать секреты программного обеспечения, не должно прикладываться никаких исходных текстов. Разработчики программного обеспечения могут использовать наследование для создания новых производных классов на основе тех классов, которые предоставлены им дистрибьютерами программного обеспечения. Программные средства, которые работают с классами, предоставленными дистрибьютерами, будут продолжать работать и с производными классами, используя ( с помощью динамического связывания) переопределенные виртуальные функции, имеющиеся в этих классах. [1]
Динамическое связывание требует, чтобы во время выполнения программы вызов виртуальной функции-элемента был бы направлен варианту виртуальной функции соответствующего класса. Для этого служит таблица виртуальных методов, которая реализуется в виде массива, содержащего указатели на функции. У каждого класса, который содержит виртуальные функции, имеется таблица виртуальных методов. Для каждой виртуальной функции в классе таблица имеет элемент, содержащий указатель на вариант виртуальной функции, используемый в объектах данного класса. Виртуальная функция, используемая в некотором классе, может быть определена в этом классе или прямо или косвенно наследоваться из базового класса, стоящего выше в иерархии. [2]
Динамическое связывание дает возможность независимым производителям программного обеспечения ( ISV - Independent Software Vendors) распространять свои программы, не раскрывая являющихся их собственностью секретов. Распространяемое ими программное обеспечение может состоять только из файлов заголовков и объектных файлов. [3]
Динамическое связывание дает возможность независимым производителям программного обеспечения ( ISV) распространять свои программы, не раскрывая своих секретов. Распространяемое ими программное обеспечение может состоять только из файлов заголовков и объектных файлов. [4]
При динамическом связывании во время выполнения программы вызов виртуальной функции-элемента перенаправляется функции из соответствующего класса. Для этой цели используется таблица виртуальных функций, называемая vtable, реализованная в виде массива, содержащего указатели на функции. Каждый класс, содержащий виртуальные функции, имеет таблицу vtable. Для каждой виртуальной функции класса в vtable включается указатель на версию виртуальной функции, используемую для объекта этого класса. Виртуальная функция, используемая в конкретном классе, может быть либо определена в нем, либо унаследована, непосредственно или косвенно, из вышестоящего в иерархии базового класса. [5]
При динамическом связывании во время выполнения программы вызов виртуальной функции-элемента перенаправляется функции из соответствующего класса. Для этой цели используется таблица виртуальных функций, называемая vtable, которая реализована в виде массива, содержащего указатели на функции. Каждый класс, содержащий виртуальные функции, имеет таблицу vtable. Для каждой виртуальной функции класса в vtable включается указатель на функцию, используемую для объекта этого класса. Виртуальная функция, используемая в конкретном классе, может быть либо определена в нем, либо унаследована, непосредственно или косвенно, от стоящего выше в иерархии базового класса. [6]
В случае динамического связывания, которое происходит при вызове DLL-функции программным кодом, компоновщик для установки таблицы импорта исполняемого файла использует сведения из объявления подпроцедуры external. Когда операционная система Windows загружает исполняемый файл в память, она сначала загружает все необходимые DLL, а затем запускает программу. В ходе загрузки Windows заполняет таблицу импорта программы адресами DLL-функций в памяти. Если по какой-либо причине DLL не найдена или процедура, к которой происходит обращение, в найденной DLL не представлена, программа запущена не будет. [7]
В общем случае динамическое связывание считается неприемлемым, поскольку значение функции может меняться в зависимости от контекста, в котором она используется. Это означает, что при вызове одной и той же функции можно получать различные ответы, что противоречит идее функциональности. Для устранения этой проблемы все современные функциональные языки используют статическое связывание. [8]
Перегрузка функций не использует динамическое связывание. [9]
И наконец, рассмотрим динамическое связывание. [10]
Цель номер 2 ( динамическое связывание) означает, что разрешение внешних ссылок не может осуществляться до времени выполнения. [11]
И наконец, рассмотрим динамическое связывание. [12]
Обеспечиваемый виртуальными функциями и динамическим связыванием полиморфизм довольно эффективен. Использование этих механизмов незначительно повлияет на эффективность системы. [13]
В языках программирования с динамическим связыванием переменных - переменная, не имеющая значения. [14]
Обеспечиваемый виртуальными функциями и динамическим связыванием полиморфизм довольно эффективен. Использование этих механизмов незначительно влияет на эффективность системы. [15]