- ベストアンサー
ダイナミックリンクライブラリとは? 実行ファイルとの違いや使い方を解説
- ダイナミックリンクライブラリとは、実行時にメモリ上で実行ファイルとリンクされるファイルのことです。一方、実行ファイル作成時にライブラリもリンクしてある場合はスタティックリンクと呼ばれます。スタティックリンクの場合、実行ファイルのサイズも大きくなります。
- プログラムは階層構造であり、ファイルの読み書きや画面の制御などの一部は自分で作る必要はありません。先人が作ったライブラリを使い回すことができます。
- 疑問点として、①ダイナミックリンクライブラリは実行ファイルと同時に実行されるのか、②スタティックリンクによって実行ファイルのサイズが大きくなるのかがあります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>(ここでは_Dの部分はスタティックリンクの意味のつもり)は、ダイナミックリンクの意味のつもりですよね? はい、そのとおりです。失礼しました。 >ダイナミックリンクライブラリと、ダイナミックリンクの違いって、何でしょうか? ダイナミックリンクライブラリというのはこれまでの説明に出したx.DLLやy.DLLのような「ファイル」のことです。 ダイナミックリンクは下記に挙げるような「作業」を指します。 ・実行ファイルを作る際にどのダイナミックリンクライブラリを使うかを指定すること(A_D.EXEの生成時にx.DLLとy.DLLを指定する) ・実行ファイルの実行を開始するときに、指定されたダイナミックリンクライブラリをメモリに読み込んで実行の準備を整えること(A_D.EXEの実行を始めるときに、まずA_D.EXEをメモリに読み込み、続けてx.DLLとy.DLLもメモリに読み込む) ここであれこれ説明しても質問者さんの現在の知識レベルだとなかなかイメージが湧かないかもしれません。少し大袈裟に表現するなら、小学生に三角関数の説明をしているような気分です。上手な人ならばうまく要点を伝えられるのかもと思いますが。
その他の回答 (6)
- korena
- ベストアンサー率10% (3/28)
疑問点が3個あります 1)質問者様にとってプログラミングとはなんでしょうか 2)質問者様の日本語レベルとプログラミングレベルは同程度でしょうか 3)サブルーチンすら理解出来ないでDLLを理解出来ると考えてるのですか ご教授頂けると幸いです。すみませんが。
- _kappe_
- ベストアンサー率68% (1585/2310)
>ダイナミックリンクライブラリでは、機能を除くと書かれていますが、スタティックリンクライブラリでは、機能を含むとなっているのですが、そういうものなのでしょうか? 回答No.1に書いたプログラムAの場合で説明します。 スタティックリンク形式の実行ファイルをA_S.EXEと呼ぶことにします(ここでは_Sの部分はスタティックリンクの意味のつもり)。A_S.EXEは、プログラムAの本体部分と機能xと機能yを含んでいて大きさ130MBです。実行するときにはA_S.EXEだけあれば動きます。 一方、ダイナミックリンクの場合は機能xと機能yがそれぞれ別のダイナミックリンクライブラリのファイルになっていると想定しています。機能xのファイルはx.DLL、機能yのファイルはy.DLLと呼ぶことにします。 ダイナミックリンク形式のプログラムAの実行ファイルはA_D.EXEと呼ぶことにします(ここでは_Dの部分はスタティックリンクの意味のつもり)。A_D.EXEに含まれているのはプログラムAの本体部分だけで、大きさ100MBです。実行するときにはA_D.EXEだけでは動かせず、A_D.EXE、x.DLL、y.DLLの3つのファイルが必要です。 A_S.EXEの中に含まれていた機能xと機能yを別ファイル(x.DLLとy.DLL)に分離したので、A_D.EXEの中には機能xと機能yを含む必要がなくなったということです。A_D.EXEの中に機能xと機能yを含んだままであると、x.DLL・y.DLLに機能を分離した意味がなくなります。 なお、実行ファイルに.EXE、ダイナミックリンクライブラリのファイルに.DLLとつけるのはWindowsでの流儀です。Windowsを知っている人には想像しやすいだろうと思って例に使いました。 追加で質問をされる場合は、下記の情報を補足してもらえると答えやすくなりますのでよろしくお願いします。 ・単なる書き写しではない100行以上の長さのコンピュータプログラムを自分で書いたことがありますか ・メインルーチンとサブルーチン、ダイナミックリンクライブラリなどについて多数の質問をされていますが、そのきっかけや動機は何ですか
- superside0
- ベストアンサー率64% (461/714)
多分、コンピューター上の CPU、ストレージ、ファイル、メモリーといったものが どのように連動して動いているかといった基礎知識がないまま、 いきなり プログラミングのテクニックに手を出していて どのように動くののかがイメージできなくて 混乱されている気がします。 なので、コンピュータの基礎から学習されることをお薦めします。 > スタティックリンクで、実行ファイルのサイズもそれだけ大きくなる。とはどういうことでしょうか? 1つのプログラムを作るとき プログラマが独自に開発した部分をA 別途提供された部品郡(ライブラリ)をBとします。 これをダイナミックリンクで 実行ファイルを作った場合は 実行ファイルの中身は、Aのみとなります。 #AからはBの部品を使っているので、 #Aだけの実行ファイルでは実行できないように一見、思えますが #Bの部分は別のファイルとして存在していて #実行時にメモリー上でリンクされますので、 #実際には実行可能となります。 これをダイナミックリンクでなくスタティックリンクで 実行ファイルを作った場合は 実行ファイルの中身は A+B となります。 A < A+B なので、ダイナミックリンクよりスタティックリンクの 実行ファイルは Bのぶんだけ大きいことになりますよね。 (それだけ大きくなるというのは そういう意味です)
補足
ダイナミックリンクライブラリと、ダイナミックリンクの違いって、何でしょうか?ご教授頂けると幸いです。すみませんが。
- korena
- ベストアンサー率10% (3/28)
疑問点が2個あります 1)質問者様にとってプログラミングとはなんでしょうか 2)質問者様の日本語レベルとプログラミングレベルは同程度でしょうか ご教授頂けると幸いです。すみませんが。
- _kappe_
- ベストアンサー率68% (1585/2310)
>なぜ、この様な値になるのでしょうか?なぜ、プログラムAが100MBになるのでしょうか? >他も同様です。機能x:10MBは、決め事ですか?他も同様です。 回答No.1に「プログラムのサイズはそれぞれ下記のような感じになるとします」と書いてあるとおり、説明のための例として適当に決めた数字です。 スタティックリンクをした場合のほうがサイズが大きくなることの説明ができれば、他の数字を使っても構わなかったのです。 サイズだけでなく、A・B・C、x・y・zという名前も説明のために適当に決めたものです。
補足
ダイナミックリンクライブラリでは、機能を除くと書かれていますが、スタティックリンクライブラリでは、機能を含むとなっているのですが、そういうものなのでしょうか?そして、この 2つの意味に違いは、含むか除くかの違いという事でしょうか?ご教授頂けると幸いです。すみませんが。
- _kappe_
- ベストアンサー率68% (1585/2310)
どこが引用文でどこが質問者さんの文章なのかが分かるようにしてください。たとえば「引用ここから」「引用ここまで」のように書くなど。 また、どこから引用した文章なのかも明示してください。今回はhttps://okwave.jp/qa/q9859367.htmlの回答No.4が元のようです。 疑問点①への回答: それで合っています。 疑問点 ②への回答: たとえば、A・B・Cの3つのプログラムを作りたいとします。 プログラムAはxとyという機能を使う、Bは機能yとzを、Cは機能xとzをそれぞれ使うとします。 各機能の実装に必要なプログラムのサイズはそれぞれ下記のような感じになるとします。 プログラムA:100MB(機能x・y部分を除く) プログラムB:200MB(機能y・z部分を除く) プログラムC:300MB(機能x・z部分を除く) 機能x:10MB 機能y:20MB 機能z:70MB 機能x・y・zをダイナミックリンクライブラリとして実装した場合、プログラムA・B・Cを動かすには上記のサイズの合計、700MBが必要になります。 一方、機能x・y・zをプログラムA・B・Cにスタティックリンクするとサイズは下記のようになります。 プログラムA':130MB(機能x・y部分を含む) プログラムB':290MB(機能y・z部分を含む) プログラムC':380MB(機能x・z部分を含む) 3つの合計で800MBが必要になり、ダイナミックリンクを使った場合よりも合計サイズが100MB増えました。 実際にはこれほど話が単純ではありませんが、大雑把にはこの説明で分かると思います。
補足
各機能の実装に必要なプログラムのサイズはそれぞれ下記のような感じになるとします。 プログラムA:100MB(機能x・y部分を除く) プログラムB:200MB(機能y・z部分を除く) プログラムC:300MB(機能x・z部分を除く) 機能x:10MB 機能y:20MB 機能z:70MB ここまで引用 で、なぜ、この様な値になるのでしょうか?なぜ、プログラムAが100MBになるのでしょうか? 他も同様です。機能x:10MBは、決め事ですか?他も同様です。ご教授頂けると幸いです。すみませんが。
お礼
では追加の質問に答えます。 ①ありません。 ②Yahoo知恵袋で、ある本のことを調べて、いろんなところのサイトに聞いているうちにそのような言葉を出した人がいたからです。 で、ダイナミックリンクライブラリと、ダイナミックリンクの違いって、何でしょうか?ご教授頂けると幸いです。すみませんが。
補足
揚げ足をとるようで申し訳ないのですが、(ここでは_Dの部分はスタティックリンクの意味のつもり)は、ダイナミックリンクの意味のつもりですよね?ご教授頂けると幸いです。すみませんが。