拡張子がdllとなっているファイルを見かけた事はありませんか?
DLLとは Dynamic Link Library(ダイナミック・リンク・ライブラリ)
つまり動的リンクライブラリと呼ばれるものです
相対するものにStatic Link スタティックリンク、つまり静的リンクというものがあります。(ライブラリとは言いません)
と言われても何ことかさっぱり解りませんね
簡単に説明します
★ソフトの設計をしていると、しばしば同じ処理を行う部分が出てきます
例えば : A + B の結果を C に入れる
と言う処理をする部分があちこちにある場合、
いちいちその場でロジックをコーディングするのは無駄になりますね(EXE
ファイルのサイズや実行時のメモリ容量など増大につながる)
そこでサブルーチンという概念があります
つまり、プログラム本体とは別に作る特定の処理だけを行う実行ファイルです
下図のようにこの処理を必要とする部分から呼び出して、各部共通の処理を行わせる部分プログラム(サブルーチン)となります
AとBとCの情報だけ引数(パラメータ)で教えてあげれば同じ処理を1か所に纏めることができて無駄な諸元を省く事ができます
このように本体のプログラムXとサブルーチンYは別々の実行ファイル(EXEファイル、ロードモジュール)として作られます
注:サブルーチンは単独で動作することはできません
ここまでは動的リンクも静的リンクも考え方は同じです
1.実行ファイルが作られる時の違い
①静的リンクの場合
プログラムXとサブルーチンYはコーディング後に
CU(コンパイル・ユニット)と言う形式に一旦変換されます(コンパイルするなどと言います)
これをLinker(リンカー)と言う処理ソフトによってリンク(結合する、個々のプログラムを一体化するなど)と言う処理が行われて一つの実行ファイル(ロードモジュール、EXEファイル、DLLファイルなどと言います)が作られます
②動的リンクの場合
プログラムXとサブルーチンY(DLL)は別々に単体モジュールとし
てビルドされてOSに登録されます
2.実行時の違い
①静的リンクの場合はプログラムXがメモリ上に読み込まれ、OSによって実行されますが、この時サブルーチンYはこのプログラムによって使われる事がリンカーからOSに伝えられているので、GoTo命令が実行された時にハードディスク等の記憶媒体からメインメモリに実装され、実行されます
ただし、プログラムXしかこのサブルーチンYを使うことはできないので、Xの動作時に判定される実行ファイルサイズにあらかじめYのサイズが含まれています。
②動的リンクの場合、必ずしもサブルーチン(DLL)は一つのプログラムから使われるものとは限りません
そこでOSは現在実行されているタスク(JOB)がどのDLLを使うかを判断して必要な物はメモリーに常駐させ、個別に呼び出されるDLLは必要に応じて実装されます
これが動的と言われるもとになっています
3.静的リンクの実行時イメージ
4.動的リンクの実行時イメージ
5.まとめ
①動的リンク方式は、今ではパソコンはもとより、UNIX系のEWSなどもこの方式がほとんどです(例:ORACLEサーバ他)
②大きなプログラムになると数百とか数千ものDLLを有したものもあります
③OSのベンダーはDLLをサードパーティなどに公開して、仕様も有料で提供しています
④個別のソフトウェアが使用するDLLはインストール時に登録されます
以上、ごくごく簡単な説明ですが、かえって解り難かったらごめんなさい