@atsushieno なるほど、MSの.NETだとLOHに入れちゃうと断片化が起きて長時間起動しっぱなしなプロセスが止まってしまうなの問題がおきてたまに話題になります。.NET 4で改善されたらしいですが、詳細は把握できておりませぬ。
2011-12-10 16:21:48C++でnewが返したポインタをGC対象に登録する実装だと、継承絡みで厄介。 子クラスを親クラスポインタで指して、親クラスを登録すると間違ったサイズで登録されてしまうかも。 #msgcben メモ
2011-12-10 16:30:11確かに、v6インタプリタ作ってるときにアセンブリコードをよく眺めていたけど、「これメモリに入れなくてもよくね?」って箇所はよくあった
2011-12-10 16:30:27ご指摘事項:継承したときの対策→operator newを独自定義するしかない?、アラインメントの問題→1バイトずつスキャンするしかない、最適化の問題→レジスタもスキャン対象にする #msgcben
2011-12-10 16:31:43アラインメントの問題もある。 今回はポインタサイズごとにスキャンしているが、たとえばpragma pack(n)とかやられると問題がある。 GCって実装を考えると問題がたくさん出てくるなー。 #msgcben
2011-12-10 16:33:24マーク&スイープのアルゴリズムは知っていましたが、実際に処理を組んだことはなかったので楽しかったです ありがとうございました #msgcben
2011-12-10 16:55:18@takekazuomi C++11では見送られてしまいましたからね。C++は一企業独自の仕様じゃないので、次が出るのは5年、10年のスパンになるんでしょうか・・・
2011-12-10 17:01:43そういえば、pointer を 1 byte づつインクリメントすると、bus error で落ちるのが昔あったけど、最近はもう無いんだよね。
2011-12-10 17:25:42なんか、gc smart pointer のtemplate class (gc_ptr<T>)とか実装できなのかな?gc_smptr<T>の new を overload して、Tの中ではgc_ptr<T> しか使わないとかしたらどうかな。最近c++使ってないから、なんとも。
2011-12-10 17:36:59LOH のサイズ、一応実験して 85KB くらいが良いってなったんじゃなかったっけ。あと、.NET 4 で改善されたのは LOH の実装というより、アロケーターの改良だったような(うろ覚え)
2011-12-10 17:40:47お疲れ様でした! #msgcben / マーク&スイープ勉強会 に参加してきた - ctrl-alt-moccos http://t.co/6Wk4BhSz
2011-12-10 20:52:46