[過去ログ] GCは失敗。メモリは自分で管理せよ! その2©2ch.net (720レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
60: デフォルトの名無しさん [sage] 2015/11/27(金) 12:24:34.85 ID:ZRdaHx9T(1) AAS
>>31
31(1): デフォルトの名無しさん [] 2015/11/22(日) 18:20:40.59 ID:WFE6EpHf(2/2) AAS
Formなんかも参照が亡くなったら強制的に殺すべきだったと思うわ
ファイナライザーの処理がひどいことになると思うけど
Formはnull入れてあげないといけないんだっけ?

なんか、場合場合によってnull入れてあげないといけなかったり入れなくてもよかったり。
ならnull入れるで統一でいいじゃんと思った
89: デフォルトの名無しさん [sage] 2015/11/29(日) 13:48:13.85 ID:U49gaUJj(1) AAS
信じて送り出した >>87
87(2): デフォルトの名無しさん [sage] 2015/11/29(日) 00:14:42.24 ID:qbMwzV1h(1) AAS
>>84
> そもそも解放処理って忘れやすいものだろ

それを忘れるなどとんでもない
確保&開放なんてプログラミングの花じゃん
キモじゃん
そこを工夫するのが楽しいんじゃん
設計も楽しいし
チマチマテストすんのも楽しい
温泉行って湯につかり忘れる心配はない
がわがままな顧客を✕✕して三面記事に載るなんて…
134
(4): デフォルトの名無しさん [sage] 2015/12/03(木) 12:20:09.85 ID:AuS7g0FI(1) AAS
ここでメモリ確保
ここでメモリ解放

たったこれだけが書けない管理できないとかw
261: デフォルトの名無しさん [] 2015/12/09(水) 01:14:15.85 ID:wAGGTtTq(1) AAS
>>260
260(1): デフォルトの名無しさん [sage] 2015/12/09(水) 00:46:02.26 ID:WVnNYSfg(1) AAS
>>249
javaは世代別管理でGCの種類は色々選べるはずでは
起動時に切り替えられるだけであって
オブジェクトごとには切り替えられないのでは
326: デフォルトの名無しさん [sage] 2015/12/20(日) 19:32:49.85 ID:i39XsMQ2(5/5) AAS
>>324
324(1): デフォルトの名無しさん [sage] 2015/12/20(日) 17:33:49.10 ID:6vo8OCaj(3/3) AAS
>>322
>読み込みと書き込みを別のリソースに分離したり読み書きが同時に出来るように作る
破壊的代入の世界ではそいつは常に可能とは限らない

>308の例で、リソースCがファイルXなのだとしたら、オブジェクトDが上書きすべきもあくまでファイルXでないといけない。
つまりリソース分離の余地など無い
(正確には、無理矢理ファイルA、BはファイルX、DはファイルYに分ける設計もありえるが、XとYに対する変更をいつどのように統合するかという超難題が生じる

この手の混乱は、A、BがアクセスするリソースCの開放タイミングの決定をGCに任せてサボったがために生じるのである
ファイルの分割は必ずしも必要ではないし更新モデルから読み取りモデルへの同期も必要ないよ
328: デフォルトの名無しさん [sage] 2015/12/20(日) 19:49:46.85 ID:kaqci566(1) AAS
メモリ管理もできないんだから
データの依存関係とか関係ねえ〜〜〜〜〜〜〜〜〜〜〜〜
でおわりでは
446: デフォルトの名無しさん [sage] 2016/03/28(月) 00:20:40.85 ID:j/beyn8U(1) AAS
>>440
440(2): デフォルトの名無しさん [sage] 2016/03/27(日) 22:32:53.86 ID:vj+h39OC(10/10) AAS
>「いつか」全員が所有権を手放したら「即座に」破棄される
>「いつか」全員が所有権を手放したら「いつか」GCで破棄される
>どう違うというのか。

少なくとも最善が尽くされるという意味で違うし
同じデータと同じプログラムで有れば、常に同じタイミングで開放処理が走るという再現性が有る

それから、自分しか所有権を持っていない場合、つまり参照数が常に1というシンプルな状況ですら
参照カウンタ方式の方が開放処理が自動化されて楽

参照カウンタ方式で有れば、スマポを使っておけば済む
scoped_ptrでも良い

マークスイープ系GCであれば、自身しか所有権を持たない単純な場合でも
非常に面倒なことになる
自身にDisposeを実装して自身のメンバのDisposeを呼び出すコードを手動で書かなければならない
何故こういったコードをコンパイラが自動生成できず、手動で書かなければならないのかの根底に
まさにマークスイープGCの存在が有る
マークスイープ系GCは何処からも参照されなくなったことがその場ですぐに分からない
GCを発動してみるまで保証することが出来ない

自分のDisposeが呼び出された、まさにその瞬間に、自分のメンバに対してもDisposeしてよいのかどうなのか
参照数がリアルタイムで即座に分からないので判断する材料が何も無く
コンパイラはC++のデストラクタのように自動で芋づる式に開放処理を呼び出すコードを生成することが出来ない

要するにマークスイープ系GCではDisposeのコンパイラによる自動生成が出来ないという大きなマイナスが有る
前者(参照カウントGC)はRAIIができるが後者(マーク&スイープGC)ではできないというお前の
主張について言っているんだが?
「最善が尽くされる」からRAIIができて、尽くされないからRAIIができないとでも言うのだろうかw

>要するにマークスイープ系GCではDisposeのコンパイラによる自動生成が出来ないという大きなマイナスが有る

何度も例に挙げているC++/CLIでは、デストラクタを記述するとコンパイラによってDisposeが追加される。
そして、ローカルスコープに置いたオブジェクトに対してはスコープを抜ける際に自動的にdeleteが呼ばれる。
そこからdelete→Dispose→デストラクタと呼び出される。RAIIに必要なものは揃っているし、事実、可能だ。
もちろん、そのメモリ領域は別のタイミングでGCによって回収される。

ここまで説明しても理解できない低脳ならしょうがない。
やはりデストラクタとファイナライザの違いが理解できてないようだからそこから勉強しなおせ。
543
(1): デフォルトの名無しさん [sage] 2016/04/24(日) 22:39:17.85 ID:WrdDgWl7(1) AAS
マークスイープでメモリリークってどうやって起きるんだ?

初心者だから優しく説明してほしい
549: デフォルトの名無しさん [sage] 2016/04/29(金) 22:46:31.85 ID:wZxrhoKH(1) AAS
C++/CLIはデストラクタが呼ばれるだけで、managedメモリの解放がGC任せなのは変わらんよ。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.040s