トップページ > プログラム > 2016年01月27日 > eULyfEEH

書き込み順位&時間帯一覧

5 位/200 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000001000030000149



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part122 [無断転載禁止]©2ch.net
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
HSP総合スレ【part 9】 [無断転載禁止]©2ch.net
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
C#, C♯, C#相談室 Part89 [転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part122 [無断転載禁止]©2ch.net
128 :デフォルトの名無しさん[sage]:2016/01/27(水) 12:30:07.60 ID:eULyfEEH
>>125
>それはそのクラスが内部で処理することであって

ずっとその話なのだが
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
363 :デフォルトの名無しさん[sage]:2016/01/27(水) 17:10:09.80 ID:eULyfEEH
GCのすべてを否定するつもりはないけど・・・
GCはメモリ管理を自動化する技術だけど、今のコンピュータはメインメモリを何十ギガ積んでたりするのも普通で
メインメモリが足りなくなることはほぼ無くて、しかも仮想メモリもあるから、なおさらメモリは潤沢で・・・
むしろメインメモリ以外のリソースの方が余程貴重で、もし仮にメインメモリが足りなくなるまで
GCを発動しないアホなGCが有ったとしたらメインメモリより先に他のリソースが枯渇する状況

だからメインメモリは無駄遣いしてもよいけど、他のリソースは使い終わったら
こまめに開放しないとダメだから、いつ実行されるか分からないマークスイープ系GCの余計にRAIIな仕組みも必要なわけ

しかしこのRAIIが付け焼刃でなまっちょろい出来だったりする
C#で言えばDisposeが有るけど、C++のデストラクタのように特別扱いされておらず
ただの普通の関数でしかないので、C++のデストラクタみたいに自身のメンバ変数について
自動で芋づる式に呼び出してくれない
だから手動でメンバのDisposeを芋づる式に呼び出すコードを記述しなければならない

いちいち自身のメンバ変数にIDisposableなものが有るか無いか調べるのもひと手間かかるし
もしそうだったら自身もIDisposableにする必要があり、例の一連のイディオムを書かなければならない
当たり前にDisposeの呼び出し忘れが有ってもいけない
まるで、mallocしたらfreeするのと似ている
しかもIDisposableはコンポジションで増殖する
IDisposableなオブジェクトをコンポジションしたら、自身もIDisposableといった具合

C#のようにコンパイラマジックでなんでも実現する言語で
どうしてDisposeをC++のデストラクタみたいに特別扱いしなかったのか謎だ
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
364 :デフォルトの名無しさん[sage]:2016/01/27(水) 17:24:38.54 ID:eULyfEEH
謎だといったが、理由ははっきりしていて
メンバのDisposableを自動で呼び出す為には
他で使われてないことを保証する必要があって
参照カウンタ方式のようにローコストなものなら簡単に分かるが
これでは循環参照の問題が出る
プログラマが循環参照を気にしなくてもよいことが前提の
マークスイープ系のGCを搭載した言語では設計思想が破たんするので
参照カウンタ方式は採用できないし
マークスイープ系GCでは何処からも参照されていないことがローコストに分からないので
自動でDisposeを呼び出す仕組みを用意できない
どうにもならない

結局C++の方式が一番優れている
循環参照が発生する場合はweak_ptrを使う事だけ注意を払えば
GCにまつわる他の問題が一切発生しない
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
365 :デフォルトの名無しさん[sage]:2016/01/27(水) 17:46:52.79 ID:eULyfEEH
もっと言えばC#でDisposeを実装する場合でも↑は問題になる
自身のメンバのDisposeを呼んでよいのかどうなのか

完全に自分しか使ってないことが分かっているのであればDisposeを呼び出して問題ないが
あちこちから参照されている可能性があるメンバなら勝手にDisposeを呼び出してはいけない

GC任せにするか、自分で参照カウンタを実装するか
どちらにせよ、RAIIと相性が悪い
HSP総合スレ【part 9】 [無断転載禁止]©2ch.net
112 :デフォルトの名無しさん[sage]:2016/01/27(水) 22:53:30.43 ID:eULyfEEH
コンテストのツール系の入賞作品に大概書かれている「実用性がある」云々
これじゃまるでHSPでツールを作ると、普通では実用性が有るものが作れないみたいじゃないかwww
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
345 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:06:55.48 ID:eULyfEEH
Cより覚えることが少なくてシンプルで他の言語の基礎になっていて
学んだことの応用が効いて実用性のある言語が他にあるか?
初心者が学ぶのに妥当だと思うが
C#, C♯, C#相談室 Part89 [転載禁止]©2ch.net
923 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:08:26.64 ID:eULyfEEH
ベクトル モートル ビール
C++相談室 part122 [無断転載禁止]©2ch.net
189 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:20:30.30 ID:eULyfEEH
>>187
言っていることがよくわからないね
shared_ptrのコストが気になるならnewせずに
スタック上に確保するなりなんなりすればよいだけだろうに
そっちの方が正統派のRAIIだというのに何を言っているのだろうか
まったくお門違い
むしろスタック上にオブジェクトを確保できる言語の方が珍しくて
C++ではそれができるだけでも有り難いというのに
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
352 :デフォルトの名無しさん[sage]:2016/01/27(水) 23:50:57.65 ID:eULyfEEH
実際問題JAVAとかC#は最初に教えるにしては覚えることが膨大すぎると思うよ
ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう
C++なんかもってのほかだしさ

>CPUを覚えるのと大差無いから基本であるが難しい

CPUに詳しくなって悪いことは無いよね、どんな言語にも応用が利くし
Cはいろんな言語のベースになっているからCを覚えると他の言語に展開しやすい
言語仕様も必要最小限でかつ、ぎりぎり実用可能なレベルで玩具というわけでもない

これがRubyとかなら、matzの実装について詳しくなる必要があるわけだが
こんなものを学んだところで有り難くない


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。