Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Решение №2



И вот тут было найдено вполне солидное решение: не стыковать модули с основной программой, а сохранять их в отдельный файл и пусть любая программа загружает его по мере надобности. Сказали, сделали. Так появились библиотеки DLL, что означает Dynamic Link Library (DLL). Это библиотеки, которые подключаются к программе динамически. В них можно хранить исполняемый код в виде процедур или функций, ресурсы программы, графику или даже видео ролики.

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

Сейчас уже DLL -это не просто динамически подгружаемая библиотека. Ты наверно уже не раз слышал про компоненты ActiveX. Они так же могут быть выполнены в виде ocx или dll файлов. Да оно и понятно, ActiveX используются сейчас достаточно много и занимают места в несколько раз больше чем самая большая DLL библиотека. Так что единственный и нормальный выход экономить место винта и памяти это засунуть ActiveX в динамически подгружаемую библиотеку. Хотя это уже не та DLL, но всё же работает по тем же принципам.

У динамических библиотек есть единственный недостаток -на ее загрузку тратится лишнее время. Если бы код, находящийся в DLL был бы скомпонован с программой, то он грузился бы намного быстрее. Зато если библиотека уже загружена другой программой, то она появляется намного быстрей. Не веришь? Отложи сейчас книгу и возьми в руки секундомер. Теперь запусти Word или Excel. Засеки сколько времени будет проходить загрузка. Теперь закрой эту программу и запусти ее снова. Она появится на экране практически моментально. Это потому что после выхода из программы, DLL файл не выгружается из памяти. Это происходит только тогда, когда операционной системе не хватает памяти и ни одна из программ не использует в данный момент эту библиотеку.

А теперь представь себе, что такое Word!!! Представил? Это и текстовый редактор, и проверка орфографии, и построитель диаграмм, редактор формул и куча еще всякой всячины. Представь себе, что было бы, если все это засунуть в один файл? Нет, ты это не можешь представить. Это был бы один запускной файл размером в 30-50 мегабайт.

А теперь вспомни, что я тебе сегодня говорил: перед запуском, программа загружается в память. Представляешь теперь, сколько бы грузился Word? А сколько памяти он съёл бы? А тебе ведь и половина его возможностей абсолютно не нужна. И зачем же их грузить в память?

А при использовании динамических библиотек в запускном файле находится только самое основное, а дополнительные возможности подгружаются по мере надобности из DLL-файлов. Например, когда стартует Word, то загружается только модуль текстового редактора. Когда ты выбрал редактор формул или объект WordArt, то Word подгружает из dll файла код выбранного объекта и выполняет его. Таким образом, суммарная скорость загрузки уменьшается, причем очень даже значительно.

Ещё одно большое преимущество динамических библиотек – при их использовании код программы разбивается на несколько файлов (зависит от количества DLL файлов). Допустим, что в одной из функций находящейся в DLL оказался код с ошибкой. В этом случае не надо обновлять всю программу, а достаточно передать всем пользователям только этот DLL файл, и программа получит необходимые обновления.

У динамических библиотек сплошные преимущества и только два недостатка:

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

2. 2. Изначально динамические библиотеки были процедурными. Хотя сейчас умельцы умудряются использовать их для хранения объектов, но это очень неудобно. Но, несмотря на это, ActiveX (изначально объектные) могут храниться в файлах с расширением dll.

Но всё же динамические библиотеки получили широкое распространение и программисты используют их на каждом углу, когда надо и когда не надо. Никогда нельзя быть уверенным, что какой-то код уже больше никогда не понадобится. Всегда нужно рассчитывать на будущее.

Я надеюсь, что я тебя убедил в великих возможностях динамических библиотек. Это действительно так. Конечно же, ActiveX более продвинуты, но они требуют неудобной регистрации в системе (в реестре) и намного сложнее в программировании, а библиотеки пишутся достаточно просто и их достаточно только скопировать на другой компьютер, чтобы программа смогла её найти.

Из чего же сделан Windows?

Все наверно помнят такую песенку: "Из чего же, из чего же, из чего же, сделаны эти мальчишки?". Глупейшая песня, и я со слезами на глазах вспоминаю, как я в лагере (я имею ввиду пионерский, а не концлагерь) распевал ее вместе с остальными пионерами. Ох, и веселые были времена. Жаль, что сейчас так не развлечешься. О чем это я? Ах да... Я хотел рассказать тебе, из чего состоит Windows.

Большинство думает, что Windows - это все что находится в папке c:\Windows, а ее ядро -это win.com. В какой-то степени это так, но не совсем. Ядро ОС Windows - это простой DLL файл, а если быть конкретнее, то это Kernel32.dll. При старте Windows эта библиотека загружается в память в единственном экземпляре, и любая программа может обращаться к содержащемуся в ней коду и использовать его в своих целях. В этой библиотеке расположены API функции, предназначенные для распределения памяти и многое другое. Мы эти функции не вызываем напрямую, потому что Delphi прячет этот сложный процесс от нас, но иногда тебе может понадобиться воспользоваться ими. Так что помни, если ты выделяешь память, то в этот момент используется Kernel32.dll.

Точно так же, за вывод графики в Windows отвечает GDI32.DLL, которая так же загружается при старте в единственном экземпляре. Все функции для работы с графикой находятся в этой библиотеке. Есть и ещё одна библиотека, User32.dll, которая отвечает за создание окон и обработку сообщений. Все эти три библиотеки составляют ядро ОС Windows.

В Windows очень много недостатков, но динамические библиотеки это достаточно гениальное решение многократно используемого кода.





Дата публикования: 2014-11-28; Прочитано: 167 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...