• ベストアンサー

ガベージコレクションをノートと消しゴムに例えると

unokwaveの回答

  • ベストアンサー
  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.4

使用中領域を纏めて詰める処理はコンパクションと言い、ガベージコレクションというゴミ集め処理のついでに行われる処理系もありますが、厳密には別です。 本来の質問ですが、「ノートに書いてある邪魔になった不要な箇所の落書きを消しゴムで消して、書ける空白の領域を確保する」のうち「落書き」→「書き込み」への変更と、「邪魔になった」を削除すればその解釈で良いと思います。 書かれている内容が落書きなのか重要な情報であるかはガベージコレクションにとって関知しない事で、邪魔なのかも関知していないことで、他の用途に利用できるよう処理する事が仕事だからです。 メモリ領域を管理している札があって、その札を未記入の新しい物に変えるだけ、という簡単な物もあれば、セキュリティが絡むので開放する領域の内容をすべて消している物もあります。

関連するQ&A

  • GOMプレーヤーについて教えて下さい。

    ITの専門学校でプログラミングを学んでいてフリーソフトを作ることに興味があります。 それでGOMプレーヤーのようなフリーソフトは一人で自作することは可能でしょうか? また、言語はJAVAやC#でできますか? 回答よろしくお願いします。

  • 動的確保について

    こんばんは。プログラミングについてお聞きしたい事があり 投稿させて頂きました。初心者なので見当違いでしたら申し訳 ありません。 現在、C言語でプログラムを作成しているのですが、メモリの 動的確保をする際、確保する領域の先頭アドレスを指定するという ことは出来ないのでしょうか。 現在はmallocを使用して領域を確保していますが、実験の都合上、 どうしても自分で確保すべき領域を指定したくなりました。 調べても分からないのでもしノウハウをお持ちの方がいましたら 教えて頂けますでしょうか。 宜しくお願い致します。

  • c言語のmalloc関数、またrealloc関数

    c言語のmalloc関数は確保するメモリの領域を、配列としてのみしか処理出来ないのですか。 つまり、malloc関数で確保したメモリの領域を変数、また多次元配列、また構造体としては処理出来ないのでしょうか。 c言語のrealloc関数は以前の確保したメモリの領域から、確保し直したメモリの領域の場所が変わるかもしれないという事ですが、この場合の場所が変わるという意味は、メモリの領域のアドレスが変わるという事でしょうか。 また、以前の確保したメモリの領域に代入していたデータが使用出来なくなるという事でしょうか。

  • C++の将来性・・・

    昨年まで、C++プログラマをしていました。しかし恥ずかしながらぜんぜんオブジェクト指向じゃないコードを書いていました・・・ いまJavaで仕事していて感じるのですが、C++にはガベージコレクションがないので、実はオブジェクト指向プログラミングがとてもやりにくい言語ではないですか? そうなると、C++の必然性がなくなり、C Java C# に取って代わられてC++は消え去っていく言語なのでしょうか。 「いやC++はすばらしいオブジェクト指向言語だ!」というお叱りを期待しています。

  • メモリを確保する方法(アセンブラにおけるORGの様な)ありませんか?

    PICボードの制御プログラミングをC言語で行っています。 通常は、コンパイラで自動的にメモリ領域の確保を行ってくれます。 そこをあえてプログラミングで操作したいのですが 何か良い方法がありましたら教えて下さい。 目的プログラムは、タイマ割り込みによるLEDの制御です。 組み込みソフトウェア開発の勉強中です。

  • c言語のメモリの確保について

    c言語で変数を宣言したり、領域を確保したりする場合に、メモリ上のこのアドレスに領域を確保する、といったように場所を指定することはできるのでしょうか?

  • javaとは?

    たまに「javaのアップデートをしてください」 という表示がでるのですが、javaを使うことによって何ができるのでしょうか? javaはプログラミング言語のひとつだと思っていたのですが、 インターネットをするにおいて、javaは必要な機能なのですか? javaのアップデートをしないとjavaで作られたサイトが見れないのでしょうか?

  • 使わなくなった変数に違う値を入れるのはマズイ?

    CやJAVAのような、厳密な型の存在しない言語(Perl、PHP、Javascriptなど)についての質問です。 プログラミングをしていて、途中である変数が要らなくなることがあります。これを、せっかく宣言したので別の値、それも型が違ったりプリミティブ型の値を入れてたのにオブジェクト型を入れるとか、そういう使い方をすることがあります。 例(Javascriptの場合) $hen = new Array(10); $hen[0] = 0; $hen[1] = 1; . . . for (i=0; i<10; i++) { print $hen[$i]; } //ここで配列henは要らなくなった。変わりに文字列が欲しい。 $hen = "String"; //せっかく変数henがあるので、これを入れ物として使う。 最近、C++の勉強をして、このようなケースで変数名との結びつきが無くなった変数の中身は、存在はするがアクセスする手段を失った「ゴミ」となるということを知りました。多くの言語も、同じような構造だとも知りましたが、同時に「ガベージコレクション」を装備している言語は、プログラムがその値が以降使われないと判断された場合は自動でその変数に割り当てているメモリを開放して処理速度向上を図る・・・とありました。では、例として挙げたケースでは、ガベージコレクションを装備していれば、ゴミは発生するがプログラムが自動でメモリを開放してくれるのでそこまで気にしなくても良い、という解釈で良いのでしょうか?私はPHPが得意なのですが、PHPは標準ではガベージコレクションを装備していないようなので、気をつけてプログラミングしようと思っているのですが。 余談ですが、「変数名と内容が一致しなくなるケースがある($arr = new Array();を後で$arr = "String";とするなど)からやめたほうが良い」という突っ込みはナシでお願いします。その点は承知していますので。

  • C言語におけるローカル変数が使用するメモリについて

    例のようなC言語のプログラムを動かした場合、 確保されるメモリ領域はどうなるのでしょうか。 例 #include <stdio.h> int main(void) { int a = 0; } このとき、変数aはint型なのでスタック領域に4バイトのメモリが確保されると理解しています。 と同時にaという変数名と確保されたスタック領域の番地を紐づけるようなメモリがどこかに確保されるのではないかと思ってるのですが、この理解で正しいでしょうか。 またその場合は変数aの番地はどの領域に確保されるのでしょうか。 ご教示お願いいたします。

  • プログラミング言語 rubyを用いて、

    プログラミング言語 rubyを用いて、 画像処理プログラミングを書こうとしていますが、以下の点が分かりません。 1・メモリの動的確保はどうするの?(C言語でいうmalloc) 2・ファイルから配列に展開するにはどうしたらいいの? 以上が分かればわかるきがするのですが・・ 当方 C言語での画像処理プログラミングはそれなりに経験があるのですが rubyで実現できるのかわからなくて・・

    • ベストアンサー
    • Ruby