Програмування - найвище з поміж мистецтв
Главная
Вход
Регистрация
Суббота, 20.12.2025, 06:55Приветствую Вас Гість | RSS
Меню сайта

Категории каталога
Мои статьи [13]
Новини у світі [12]
Все що відбувається у інформаційному світі

Мини-чат

Наш опрос
Скільки вам років
Всего ответов: 40

Главная » Статьи » Мои статьи

Что такое DLL и зачем они нужны

Программеры всех стран уже более 30 лет борются с проблемой многоразового использования однажды написанного кода. Так уж повелось, что 30-50% кода в простых офисных приложениях схожи между собой или решают одни и те же задачи. Ни один программер не захочет каждый раз снова кодить одно и то же. Как хорошо, когда можно использовать один раз написанный код многократно ....

Я сам не люблю в каждой новой проге писать одно и то же. Как хорошо, когда написал какой-то универсальный код, а потом только его и используешь.

РЕШЕНИЕ 1

Самым первым решением этой проблемы стал модульный кодинг. Ты пишешь какой-то кусок кода, оформляешь его в виде модуля, а потом просто используешь в своих прогах. Все прекрасно и удобно, а главное, что все довольны. Теперь не надо каждый раз выдумывать велосипед, просто добавил к своей проге определенный модуль и без проблем используй код, когда-то написанный тобой или кем-то другим.

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

ПРОБЛЕМА 1

Давай представим ситуацию, когда один добрый чел написал прекрасный модуль размером 1 метр. Другой добрый чел решил воспользоваться его возможностями и подключил к своей проге. Модуль и прога слились в одно целое. Вроде все нормально, но я же сказал, что прога и модуль слились в одно целое. Это значит, что размер проги увеличился на размер модуля, т.е. на 1 мег. Ни фига себе пельмень :). А теперь представь, что другой чел написал другую утилу с использованием этого модуля.... Его прога тоже увеличилась на 1 мег. Получается, что на винте пользователя хранятся две проги, в которых по 1 мегу кода одинаковых. И кому это нужно?

Ну, конечно же, насчет модуля в 1 мег я загнул. В те времена даже 100-килобайтный модуль было тяжело найти. Но надо учитывать, что и винты тогда были не бесконечные. Тогда крутым винтом считался диск в 20 метров. Это тебе не нынешние десятки гигов на одной пластине. Возможно, ты тогда еще под стол ходил. Я сам застал такие машины только на первом курсе института, а это было лет 8 назад.

ПРОБЛЕМА 2

Пока существовали только однозадачные ОСи, проблема с излишней растратой дискового пространства была единственной. Но как только задумались о многозадачности и в мыслях Гейтса появились идеи создать Windows, так сразу возникла другая проблема.... Представь себе ситуацию, когда ты запускаешь обе этих проги одновременно. При старте любая прога грузится в оперативку и только потом выполняется. Так что получается, что обе проги загрузят в оперативку один и тот же код. Вот это уже абсолютно никому не нужно.

Это нынешним летом память подешевела в несколько раз, и теперь лишние сто кило погоды не сделают. А раньше она стоила достаточно дорого, и люди каждый байтик доставался потом и кровью. Но если ты думаешь, что установка в свою тачку 500 мегов мозгов решит проблему, то ты крупно ошибаешься.

Хотя память и дешевая, проги от этого меньше не стали. Если посмотреть на запросы той же Windows2000, то сразу хочется взять зонтик, вставить его Биллу в задний проход и раскрыть. Это что он там такое натворил, что Windows 2000 Server просит для нормальной работы минимум 256 мегов? А если учесть, что некоторые чипсеты не поддерживают памяти более 512 мегов, то о нормальной одновременной работе Windows 2000 Server + 3D Studio Max + MPEG4 можно забыть. Они всю память сожрут как термиты за пять сек.

РЕШЕНИЕ 2

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

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

К СВЕТЛОМУ БУДУЩЕМУ

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

ЗАГРУЗКА БИБЛИОТЕК

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

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

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

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

ИТОГ

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

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

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

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

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

Точно так же за вывод графики в Windows отвечает GDI32.DLL, которая также загружается при старте в единственном экземпляре. В Windows очень много дыр, но динамические библиотеки это достаточно гениальное решение многократно используемого кода.

Графические движки

Любой геймер обязан знать про существование OpenGL. Что это такое? Какой-то пакет программ? Какой-то SDK для создания графики? Ничего подобного, это всего лишь две динамические библиотеки opengl.dll (opengl32.dll) и glu.dll (glu32.dll).

Что такое DirectX? Это графическая библиотека, которая состоит из DirectDraw, DirectInput, DirectMusic, DirectPlay и так далее. Все это не что иное, как простые динамически подгружаемые библиотеки. DirectDraw это Ddraw.dll, DirectInput это Dinput.dll, DirectMusic это Dmusic.dll и так далее. Любые игровые движки выполнены в виде динамически загружаемых библиотек.

Категория: Мои статьи | Добавил: SoNyk1987 (01.04.2008) | Автор: Horrific
Просмотров: 1008 | Комментарии: 1 | Рейтинг: 4.0/1 |
Всего комментариев: 1
1 Dll  
0
спасибо за инфу.

Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Copyright MyCorp © 2025Конструктор сайтовuCoz