昨日ここのサイトを見つけて、一通り見てみました
そこでちょっと質問なのですが、malloc関数などで動的にメモリの確保、解放を頻繁に行うと
メモリが断片化して大量のメモリを消費することになるというのを少し前にどこかのサイトで見たんですが、これはどういうことですか?
解放して、次にメモリを確保するときは解放した場所ではなく、また別の場所が使われるということでしょうか?
はじめまして
Re:はじめまして
お返事遅れてごめんなさい><;
はじめまして、こまいぬさん^^
私が考えている断片化で、本当にあっているかどうかは保証出来ませんから参考程度に聞いてください^^;
まず、断片化とは何か?
それはメモリやHDDに格納すべきデータがトビトビに記録されていて途中に色々なデータの穴が出来てしまう事です。
ん~とわかりやすくいいましょう。
今「○」が1MBの確保した領域だとしますね。
これを5個連続で用意したとします。
○○○○○
イメージ的にこんな感じになりますね。
次に最初の○を開放したとします。すると
○○○○
こんな感じになります。
最初の1MBが空いている状態になります。
この時、次に1.2MBの領域を確保しようとした時、
最初の○にははいりませんよね。ですから1.2メガの領域●は最後に確保されます。
○○○○●
こんな感じです。次に0.1MB領域を確保すると
。○○○○●
こんなイメージで領域は確保されます。すると「。」と○の間に0.9MBの空白ができてしまいます。
これを繰り返すとドンドン空白の何も境域の格納されていない空間が出来ていきます。
メモリがオーバーフローする前までこれが続くと、今度はデータを入るサイズに分割してその「穴」にデータを格納しようとしていきます。
するとドンドン読み取るスピードや書き込むスピードが落ちていきます。
これがメモリの断片化と、断片化による処理速度の低下だと記憶しています。
かなり頻繁に使ったときのまれな例だとはおもいますが、参考程度にしてください^^;
はじめまして、こまいぬさん^^
私が考えている断片化で、本当にあっているかどうかは保証出来ませんから参考程度に聞いてください^^;
まず、断片化とは何か?
それはメモリやHDDに格納すべきデータがトビトビに記録されていて途中に色々なデータの穴が出来てしまう事です。
ん~とわかりやすくいいましょう。
今「○」が1MBの確保した領域だとしますね。
これを5個連続で用意したとします。
○○○○○
イメージ的にこんな感じになりますね。
次に最初の○を開放したとします。すると
○○○○
こんな感じになります。
最初の1MBが空いている状態になります。
この時、次に1.2MBの領域を確保しようとした時、
最初の○にははいりませんよね。ですから1.2メガの領域●は最後に確保されます。
○○○○●
こんな感じです。次に0.1MB領域を確保すると
。○○○○●
こんなイメージで領域は確保されます。すると「。」と○の間に0.9MBの空白ができてしまいます。
これを繰り返すとドンドン空白の何も境域の格納されていない空間が出来ていきます。
メモリがオーバーフローする前までこれが続くと、今度はデータを入るサイズに分割してその「穴」にデータを格納しようとしていきます。
するとドンドン読み取るスピードや書き込むスピードが落ちていきます。
これがメモリの断片化と、断片化による処理速度の低下だと記憶しています。
かなり頻繁に使ったときのまれな例だとはおもいますが、参考程度にしてください^^;
Re:はじめまして
色々調べてみましたが、やはりそういう意味であっているんじゃないでしょうか。
http://yk.i.hosei.ac.jp/seminar/OS/2nd/index.html
こことか
http://www.jspf.or.jp/cd2/7505cd/75-5/sasaki/a-1.html
ここの一番下とか
説明があるんで、みてみてください。
http://yk.i.hosei.ac.jp/seminar/OS/2nd/index.html
こことか
http://www.jspf.or.jp/cd2/7505cd/75-5/sasaki/a-1.html
ここの一番下とか
説明があるんで、みてみてください。