プロが教える店舗&オフィスのセキュリティ対策術

どちらも同じように、メモリ領域の隙間を集めて、連続した利用可能なメモリ領域を増やすとありますが、違いを教えて下さい。

A 回答 (3件)

#1です。



> メモリコンパクションにガーベジコレクションの意味は含まれないと思うのですが
含まれないです。全く別物です。
ただ、メモリの整頓という点では共通しているので、情報処理試験レベルでは同一に扱っているのかもしれません。(私は情報処理試験については詳しく知らないのですが。。。)

大雑把な言い方をすれば、散らかった部屋を整頓するときに、
物を部屋の隅に寄せておくのがコンパクション
いらなくなった物を捨てるのがガーベージコレクション
という感じです。
GCだけやっちゃうと、確かに部屋の空間は増えたけど物はあっちこっちに散乱したまま、という状態になりますね。
    • good
    • 4

No1 hpsk さんの回答されている通りですが、名前を見てみればイメージしやすいのではないでしょうか。



 メモリコンパクション:記憶領域の圧縮
 ガーベジコレクション:ゴミ収集

使わなくなった領域 (=ゴミ) を解放する (=収集する) のがガーベジコレクションです。
ちなみに、プログラミング言語の機能としてガーベジコレクション (GC と略すことが多いです) と言った場合、使用しない領域をプログラマが意識することなく、自動で解放してくれる機能を指します。
たとえば、Java には GC があるとか、C/C++ には GC がないとか…。

ただし、ゴミを収集しただけでは、使用可能な領域が断片化してしまうことがあります。
この断片化のことをフラグメンテーションと呼びます。
連続した大きな領域が必要になったときに、フラグメンテーションが多数発生していると、必要な領域が確保できないことがあります。
これを解消するのが、メモリコンパクションです。

# MS-Windows 系 OS で、デフラグという機能があると思いますが、
# これはハードディスクのコンパクション (=フラグメンテーションの
# 解消、デフラグメンテーション) を行っているわけです。

本来の意味としては、メモリコンパクションにガーベジコレクションの意味は含まれないと思うのですが、どうなのでしょうか?>詳しい方、フォローあればお願いします!

確かに、情報処理試験の参考書の中には、両者を同じ意味としているものもあったように思います。
しかし、実使用上は上記のような差異があることを覚えておくと良いと思います。
    • good
    • 4

コンパクションは、burbeさんの仰るとおり、


「メモリ領域の隙間を集めて、連続した利用可能なメモリ領域を増やす」
ことですが、

ガーベジコレクションは、
「二度と使われないことがわかっているメモリ領域を解放して、再利用できるようにすること」
です。メモリの隙間を集めるという作業は含みません。
C言語のmallocはご存知ですか?
mallocした領域が必要なくなったら、freeをしなければいけませんが、それを自動的にやってくれるものだと思えばいいです。

ただし、ガーベジコレクションのアルゴリズムの中には、ついでにコンパクションもやってしまうものもあります。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!