tera-technology

プログラミングやIT技術中心のBlogです

DLLの話

最近専門書をたくさん読んでベースの知識を固めようとこんな本を読んだりしてます。

 

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

 

 

その中でDLLの話が出てきて「DLLってあんまり知らんなあ」と思い少しまとめてみる。

 

 

 

DLL(Dynamic Link Library)とは?

DLLファイルというのはその名の通りプログラムの実行時にライブラリが動的に結合されてできるファイルのことですね。DLLで何ができるかというと別々のアプリケーションがそのDLLファイルを共有できるという点にあります。

 

例えばある処理機能(ex. ログイン処理やデータ送信処理など)を持った "TestFunc()" という関数があったとします。プログラムAとプログラムBの両方がこの関数を使用するとします。

 

まず、DLLを使わない場合、それぞれのアプリケーションの実行ファイルの中に関数 "TestFunc()" を組み込みます。このことをスタティックリンクと言います。動的(Dynamic)の逆ですね。

この2つのアプリケーションを同時に実行すると関数 "TestFunc()" がメモリー上に2つ存在することになります。同じ処理なのにわざわざ個別に関数を用意するのはなかなかメモリー効率が悪いですね、メモリーも限りがありますし。

 

そこで関数 "TestFunc()" を実行ファイルではなくDLLファイルに置いてみた時を考えてみましょう。

この場合だと、プログラムAとBが "TestFunc()" が入った同じDLLファイルを参照するので、メモリー上では関数 "TestFunc()" は1つしか存在しないので先ほどの場合よりメモリー効率が良くなります。

 

このようにDLLファイルを使うことでメモリー効率を上げることができるのです!
実際WindowsもそのOS自体が複数のDLLファイルの集合体になっています。Cドライブ直下のWindowsフォルダの中身を見てみたら多くのDLLファイルを見つけられるはずです!(拡張子は見えるように設定してください)

さらに、DLLファイルにはEXEファイルを変更せずにDLLファイルを更新できるというメリットもあります。

 

以上、簡単にDLLについてまとめてみました。基本的なことが割と抜けがちなので、もっとちゃんと勉強しないとなあ