うらおブログ(移転しました)スマートフォン用の表示で見るやねうらおブログ(移転しました)この広告は、90日以上更新していないブログに表示しています。compilerBoehmのGCは保守的(conservative)なGCである。これは、root集合から辿れるならば、配列の中身すべての要素を辿ることを意味する。画像imageのように大きな配列を扱う場合、こんなことをされてはたまらない。配列の要素がでたらめな数字だと、そんなところを辿ってアクセス違反にならないの?と思うかも知れないが、GCは自分のヒープから割り当てたメモリしか辿らないので、アクセス違反は起きない。そこで、D言語の場合、大きな配列はGCのヒープからではなく他のallocator(たとえばmallocで)からメモリを割り当てるのが常套手段となっている。他のallocatorから割り当てたメモリはGCのヒープから割り当てたものではないので、GCはその先をスキャンすることをあきらめるからである。アプリケーションが肥大化してきたときに保守的なGCではどうしようもいかなくなる。保守的なGCが使われる限り、リアルタイム性が問題になる大規模なアプリは書けないんじゃないかとも思う。言ってもBoehmのGCは、一番メジャーである。D言語は言うに及ばないが、monoプロジェクト(C#のネイティブコンパイラなどを作っているプロジェクト)でもBoehmのGCが採用されている。いっちょ大規模なアプリを開発したろかい!とか考えているやねうらおにとって、これは非常に迷惑な話だ。CLI自体は型情報を持っているわけで、保守的なGCなんか使う必要はないというのに。frameworkはそのへんどうなっているかというと次のようになっている。IIhttp://www.microsoft.com/japan/msdn/net/mag00/GCI2.aspしかし、上の記事を読んでGCの仕組みについてひと通り理解するだけでも大変だろう。GCというのは、高速化したり、並列的に効率よく実行できるようにしたりするのは、非常に難しいのだ。frameworkはそれなりにうまくやっている。そのくらい理解しておけば十分だと思う。少なくとも、趣味や研究目的でもない限りはGCの自作はお勧めしない。まともなGCともなるとゲームを作るついでにひょいっと自作出来る規模のものでは決してないのだ。*1:monoのGCは、将来的にはIntelのORPに変更されるかも知れない。ORPについては、この解説が参考になるだろう。電子書籍になるに至るまでの話ブログちょっとだけ移転のお知らせ時代はまだゲームセンターあらしに追いつかないのかやねうら王、電王戦バージョン提出しました将棋の神様のレーティングはいくつなのか?月別アーカイブはてなブログをはじめよう!yaneuraoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。