GC、ガベージコレクション、ガベージコレクタ、ガーベジコレクション、ガーベジコレクタは使えない。
以下GCと記す
プログラマをメモリ管理から開放する!
といいつつ、メモリリーク問題の文献が大量にある。
これすなわち、メモリリーク問題が全然解決していないということ。
さらに、メモリ解放のタイミングの文献まで大量に生み出した。
これすなわち、新たなるメモリ管理に関する問題を生み出したということ。
malloc、freeじゃないが
結局のところ、メモリを管理するという技術は、今しばらくは、身につける・教える・学ぶべきではないだろうか?
使って、そのまま放置しても、基本的にはGCがなんとかしてくれている。
ランジョブからジョブ終了までさほどの時間を要さない。メモリも大して使わないならいいだろう。
しかし、規模が大きくなり常駐ジョブやメモリ大量使用のジョブになってくると、そんなメモリ管理の方法でやっていると、
上記「文献」を生み出されてしまう。
入門時は、メモリに無頓着でもいいだろう。それよりも、目的を達成することが先決だ。
しかし、慣れてきたら、やはりメモリの管理まで余裕を持って自分で行うべきだろう。
前スレ
GCは失敗。メモリは自分で管理せよ!
http://peace.2ch.net/test/read.cgi/tech/1412986420/
GCは失敗。メモリは自分で管理せよ! その2©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2015/11/18(水) 23:24:59.79ID:BUQ68wTG
15デフォルトの名無しさん
2015/11/21(土) 16:16:49.90ID:iOucF00Z アンwwwwマネージwwww
無理に横文字使わなくていいですよwww
無理に横文字使わなくていいですよwww
2015/11/21(土) 17:40:45.99ID:7nxNhgSu
横文字じゃなくてマイクロソフトの用語なんだが?
2015/11/21(土) 17:47:25.64ID:/uyrLxeD
c#が残念なんのはC++とデストラクタの呼ぶれるタイミングが違いすぎて移行が大変すぎることだ。
結局、手動でデストラクタを呼ばなきゃならない。GCの利便性がほとんどなし。
結局、手動でデストラクタを呼ばなきゃならない。GCの利便性がほとんどなし。
18デフォルトの名無しさん
2015/11/21(土) 19:18:42.53ID:iOucF00Z >>16
涙ふけよwwww
涙ふけよwwww
19デフォルトの名無しさん
2015/11/21(土) 21:36:26.09ID:tqUpuiXF20デフォルトの名無しさん
2015/11/22(日) 01:48:28.16ID:7AflF1fM メモリ管理を楽にするためにあるわけで人間が全部面倒みんのとは違うだろ
21デフォルトの名無しさん
2015/11/22(日) 04:41:20.06ID:WFE6EpHf やっぱりGCのほうがいいかな大規模になってくると
Cでリークはしてないけど本来開放すべきタイミングで開放してないでメモリいっぱいになるのは防ぎやすいと思うし
Cでリークはしてないけど本来開放すべきタイミングで開放してないでメモリいっぱいになるのは防ぎやすいと思うし
22デフォルトの名無しさん
2015/11/22(日) 07:04:28.69ID:MUaNGGyB >>20
楽になってメモリリークがなくなるならいいけど、メモリリーク発生するわ
プログラマがメモリ管理なんてしなくて大丈夫、とメモリの扱いが雑になって意図しないタイミングで解放されたりされなかったり
最初から管理するという方針で教えないから、こんなことになる
管理漏れをGCがうまいことやってくれる。でもGCにやらせるようだと恥。
というくらいで教育すべき
楽になってメモリリークがなくなるならいいけど、メモリリーク発生するわ
プログラマがメモリ管理なんてしなくて大丈夫、とメモリの扱いが雑になって意図しないタイミングで解放されたりされなかったり
最初から管理するという方針で教えないから、こんなことになる
管理漏れをGCがうまいことやってくれる。でもGCにやらせるようだと恥。
というくらいで教育すべき
23デフォルトの名無しさん
2015/11/22(日) 07:12:51.89ID:MUaNGGyB メモリ管理すらまともにできないやつが寿命や世代やら管理できるわけがない。
2015/11/22(日) 10:54:50.51ID:MJCWCZ10
GCそのものではなく新人教育や解説書が最初のスタンス間違えたんだよ。
GC=メモリ管理適当
という認識作ったから、GCに新しい名称つけて
教育や解説書では、メモリーの確保から解放まできちっと説明し直したほうがいい
GC=メモリ管理適当
という認識作ったから、GCに新しい名称つけて
教育や解説書では、メモリーの確保から解放まできちっと説明し直したほうがいい
2015/11/22(日) 12:31:51.68ID:Qlq25ltW
GCって完全なものだと思ってたから、C#案件でメモリリークの調査にえらく手間がかかった
GCはダメな子って認識は必要だな
GCはダメな子って認識は必要だな
2015/11/22(日) 12:38:37.22ID:mfzN9aoV
C/C++はライブラリレベルでメモリリリークの検査もテストも書けるけど
GC前提言語だとその辺がごっそり抜け落ちて後で問題になる
GC前提言語だとその辺がごっそり抜け落ちて後で問題になる
2015/11/22(日) 12:42:49.74ID:zNwKjU3u
メモリ管理できない人がお気楽で作れば、GCあっても・・・・
2015/11/22(日) 13:08:14.89ID:KDgQ57Ye
>>25
結局どんなバグだったんだい?
結局どんなバグだったんだい?
2015/11/22(日) 16:57:06.63ID:vggKhYqJ
C++でもスマートポインタ使えば勝手に開放されるよ
所謂GC任せだと、いつ開放処理が走るか分らなくなるから
その事に対する新たな対策が必要になるよ
http://ufcpp.net/study/csharp/rm_disposable.html
手続き型言語は処理の順番が重要なのに
いつ実行されるか分からないってのは中々チャレンジャーだし大掛かりな話だね
所謂GC任せだと、いつ開放処理が走るか分らなくなるから
その事に対する新たな対策が必要になるよ
http://ufcpp.net/study/csharp/rm_disposable.html
手続き型言語は処理の順番が重要なのに
いつ実行されるか分からないってのは中々チャレンジャーだし大掛かりな話だね
2015/11/22(日) 17:32:48.70ID:vggKhYqJ
前スレでも書いたけど、C#のDisposeの問題を紹介しよう
IDisposableなオブジェクトをコンポジションしてメンバに持つと自身もIDisposableにしなければならない
だから自分がコンポジションしているオブジェクトがIDisposableかどうか一々調べなければならないし
IDisposableなオブジェクトがメンバにあれば、自身もIDisposableにしなければならない
さらに、その作ったクラスをコンポジションして使うクラスもIDisposableにする必要があり・・・
という風にIDisposableはクラスで閉じずコンポジションで伝染する
というか、むしろ手動で伝染させなければならないという
しかもIDisposableの一連のイディオムはとても長くて煩雑
http://ufcpp.net/study/csharp/rm_disposable.html
こういうものを書いて、マネッジドリソースとアンマネッジドリソースで場合わけをしつつ
IDisposableなオブジェクトに関しては
手動で自分のメンバのDisposeを漏れなく呼び出すコードを書かなければならない
当たり前だが、どのメンバがIDisposableか完全に把握しておく必要が有る
手動で自分のメンバのDisposeを呼び出す作業は、まるでCのmallocを思い起こさせる
問題点は明確で、DisposeがC++のデストラクタのように芋づる式に勝手に呼ばれない事に有る
だから手動で芋づる式に呼び出すコードを書かなくてはならない
IDisposableなオブジェクトをコンポジションしてメンバに持つと自身もIDisposableにしなければならない
だから自分がコンポジションしているオブジェクトがIDisposableかどうか一々調べなければならないし
IDisposableなオブジェクトがメンバにあれば、自身もIDisposableにしなければならない
さらに、その作ったクラスをコンポジションして使うクラスもIDisposableにする必要があり・・・
という風にIDisposableはクラスで閉じずコンポジションで伝染する
というか、むしろ手動で伝染させなければならないという
しかもIDisposableの一連のイディオムはとても長くて煩雑
http://ufcpp.net/study/csharp/rm_disposable.html
こういうものを書いて、マネッジドリソースとアンマネッジドリソースで場合わけをしつつ
IDisposableなオブジェクトに関しては
手動で自分のメンバのDisposeを漏れなく呼び出すコードを書かなければならない
当たり前だが、どのメンバがIDisposableか完全に把握しておく必要が有る
手動で自分のメンバのDisposeを呼び出す作業は、まるでCのmallocを思い起こさせる
問題点は明確で、DisposeがC++のデストラクタのように芋づる式に勝手に呼ばれない事に有る
だから手動で芋づる式に呼び出すコードを書かなくてはならない
31デフォルトの名無しさん
2015/11/22(日) 18:20:40.59ID:WFE6EpHf Formなんかも参照が亡くなったら強制的に殺すべきだったと思うわ
ファイナライザーの処理がひどいことになると思うけど
ファイナライザーの処理がひどいことになると思うけど
2015/11/22(日) 22:36:02.07ID:iT1tZCI1
またお前か
メンバに持つのが間違い
メンバに持つのが間違い
2015/11/22(日) 23:18:34.23ID:7zQV9dKP
無茶いうな
34デフォルトの名無しさん
2015/11/23(月) 08:11:32.17ID:XNOSKZeE 解放処理をしなくてもGCがやってくれる。
でも、ソースに解放処理が書いてあれば、後から見たらあぁここで用済みになったのかとわかる。
可読性は非常に重要よ。
でも、ソースに解放処理が書いてあれば、後から見たらあぁここで用済みになったのかとわかる。
可読性は非常に重要よ。
2015/11/23(月) 15:41:37.20ID:qRZYsqEh
解放処理のタイミングが制御できないと、解放して欲しくないタイミングで解放されて
挙動が変わることがある
リアルタイム性が要求されるシステムでこれで困ったことがある(そもそもそんな言語使うなって話だが)
挙動が変わることがある
リアルタイム性が要求されるシステムでこれで困ったことがある(そもそもそんな言語使うなって話だが)
2015/11/23(月) 17:21:44.69ID:y4njP/wV
うわっ頭のおかしいQだ
2015/11/23(月) 17:22:22.95ID:9XGqpqVu
>解放して欲しくないタイミングで解放
なんでそんなことになったの?
参照切ってなきゃGCの対象にならないはず
なんでそんなことになったの?
参照切ってなきゃGCの対象にならないはず
2015/11/23(月) 17:24:18.17ID:OK+rBFmG
空きメモリによって使用するアルゴリズム変えたりする。
だから実行前にGC手動で走らせて、できるだけ空きメモリ増やしたりとかする。
できるだけ開放したいのに過負荷でまだメモリに余裕あるからGC走らないってのが困る。
だから実行前にGC手動で走らせて、できるだけ空きメモリ増やしたりとかする。
できるだけ開放したいのに過負荷でまだメモリに余裕あるからGC走らないってのが困る。
40デフォルトの名無しさん
2015/11/23(月) 17:46:43.41ID:XNOSKZeE メモリの解放漏れってさ、とどのつまり下手だからするんだよね
下手なやつにはプログラムを組ませないってのが鉄則だと思うの
下手なやつにはプログラムを組ませないってのが鉄則だと思うの
2015/11/23(月) 19:25:05.71ID:6m6E/SfN
c++11のshared_ptrの参照カウンタってそもそも要るんだろうか?
複数のオブジェクトが所有権を持ちあう必要性に迫られる事がないんだけど
weak_ptrの対応だけあれば良くない?
複数のオブジェクトが所有権を持ちあう必要性に迫られる事がないんだけど
weak_ptrの対応だけあれば良くない?
2015/11/23(月) 19:56:47.15ID:+Ddm9172
リソースを共有する場合なんかは使うと楽だよ
まーshared_ptrが有れば、いつ実行されるか分からないような、手の込んだGCは要らないよな
巡回参照が有る場合はどちらかをweak_ptrにする、これだけを守ってれば問題は起きない
大体の場合は所有権というか上下関係がはっきりしているからな
巡回参照のある場合も自動で開放したいという、たったこれだけのために
いつ実行されるか分からない上に重いマークスイープ式GCを導入するのは
業界全体の早とちりだったようだね
まーshared_ptrが有れば、いつ実行されるか分からないような、手の込んだGCは要らないよな
巡回参照が有る場合はどちらかをweak_ptrにする、これだけを守ってれば問題は起きない
大体の場合は所有権というか上下関係がはっきりしているからな
巡回参照のある場合も自動で開放したいという、たったこれだけのために
いつ実行されるか分からない上に重いマークスイープ式GCを導入するのは
業界全体の早とちりだったようだね
2015/11/23(月) 20:06:26.94ID:+Ddm9172
最近のC++はdeleteを直接書かないだけでなく、最早newも直接書かない方向
std::make_shared<int>() って書くよね
始めからshread_ptrで受け取るから、循環参照だけ気をつければ
リークする余地がないよね
RAIIも健在で、C#みたいにIDisposableとか要らない
デストラクタも芋づる式に呼び出されるから
>>30で書いたような問題も起きないよ
std::make_shared<int>() って書くよね
始めからshread_ptrで受け取るから、循環参照だけ気をつければ
リークする余地がないよね
RAIIも健在で、C#みたいにIDisposableとか要らない
デストラクタも芋づる式に呼び出されるから
>>30で書いたような問題も起きないよ
2015/11/23(月) 20:09:18.99ID:OK+rBFmG
C++は益々混沌としているのか。手に負えん。
2015/11/23(月) 20:35:23.62ID:PopzBtGV
>>41
糞便利な参照カウンタを使わないなんてC++使う意味なし
糞便利な参照カウンタを使わないなんてC++使う意味なし
2015/11/23(月) 22:58:10.32ID:6m6E/SfN
2015/11/24(火) 00:26:10.23ID:f4S6RtN7
うーん質問がアバウトすぎたな。もう少し具体的に書くわ
例えば2chのある板を管理するプログラムを書くとして
BoardクラスとThreadクラスを想像してみてくれ
BoardはThreadオブジェクトを管理するが、Threadは
産まれたり死んだりと揮発的で寿命が定まらないと。
で各Threadは何らかの共有リソースを持つと。
例えば一度読み込んだ画像を各スレッドで共有したいとかが
考えられるけど、画像オブジェクトをshared_ptrで共有するのは
適切ではない
なぜならある瞬間に産まれたThread群がひとつの画像を共有する
からといってshared_ptrで持たせたとしても、後の更新時に
更にその画像を共有したいThreadが現れたときに、画像が
すでにあることを何らかの形で知れないといけないから。
結局Boardなんかが画像オブジェクトのコンテナを持つ必要が
あってそのコンテナへの追加と削除のために別の共有の
仕組みが必要になるんだよ。例えばThreadがBoardに画像を
リクエストして参照カウンタを持ったアクセサを返すようなもの
だから所有権はBoardひとりが持てばよくてshared_ptrを
使う必要がなくなるという理屈
こういったケースを踏まえてもshared_ptr使うケースって
ほとんどなくね
例えば2chのある板を管理するプログラムを書くとして
BoardクラスとThreadクラスを想像してみてくれ
BoardはThreadオブジェクトを管理するが、Threadは
産まれたり死んだりと揮発的で寿命が定まらないと。
で各Threadは何らかの共有リソースを持つと。
例えば一度読み込んだ画像を各スレッドで共有したいとかが
考えられるけど、画像オブジェクトをshared_ptrで共有するのは
適切ではない
なぜならある瞬間に産まれたThread群がひとつの画像を共有する
からといってshared_ptrで持たせたとしても、後の更新時に
更にその画像を共有したいThreadが現れたときに、画像が
すでにあることを何らかの形で知れないといけないから。
結局Boardなんかが画像オブジェクトのコンテナを持つ必要が
あってそのコンテナへの追加と削除のために別の共有の
仕組みが必要になるんだよ。例えばThreadがBoardに画像を
リクエストして参照カウンタを持ったアクセサを返すようなもの
だから所有権はBoardひとりが持てばよくてshared_ptrを
使う必要がなくなるという理屈
こういったケースを踏まえてもshared_ptr使うケースって
ほとんどなくね
48デフォルトの名無しさん
2015/11/24(火) 01:21:45.79ID:0dqdPvnh IDisposableの問題はDisposeを呼ばなければリークするものとそうでないものの混在だろ
2015/11/24(火) 03:22:06.30ID:fjQi4YH+
2015/11/24(火) 05:26:33.27ID:f4S6RtN7
>>49
いやいくらでも書いてるけど基本一緒
というか上の例もそのままマルチスレッドに適用できる話でしょ
例えばproducer consumerならproducerが所有権を持つし
thread per messageなら共有データはホストが持って固有データは
個別スレッドで持つだけ
むしろマルチスレッドの場合、所有者をより厳格に決めとかないと
泣く事になるぞ
いやいくらでも書いてるけど基本一緒
というか上の例もそのままマルチスレッドに適用できる話でしょ
例えばproducer consumerならproducerが所有権を持つし
thread per messageなら共有データはホストが持って固有データは
個別スレッドで持つだけ
むしろマルチスレッドの場合、所有者をより厳格に決めとかないと
泣く事になるぞ
2015/11/24(火) 12:31:47.38ID:HvLaDP3z
所有権って・・・・
unique_ptrを使うと勝手に所有権が移動してしまうし
生のポインタを使うんならわかるけど
unique_ptrを使うと勝手に所有権が移動してしまうし
生のポインタを使うんならわかるけど
2015/11/24(火) 12:53:55.99ID:2IyJeQ15
shared_ptrで複数人が所有権を持っても良いんだぞ
上下関係さえしっかりしていれば良い
上下関係さえしっかりしていれば良い
2015/11/24(火) 13:15:01.57ID:HvLaDP3z
そんなの分かってるんだが
>>50の人はどう考えてるのか
>>50の人はどう考えてるのか
2015/11/24(火) 16:23:15.08ID:f4S6RtN7
>>51
今のC++からshared_ptrをそのまま無くせって言ってるんじゃないぞ
shared_ptrのコピーを禁止にしてweak_ptrの対応だけあれば良くないかって事
そもそも何でそんなこと言うかっていうと、
GCない言語→循環参照ガー。みたいによく言われるけど使わないで
済むなら静的解析で循環参照の起こり得るケースをエラーにしてしまう
って解決方法もあるかなと思っただけ
あとshared_ptrとweak_ptrはアトミック操作とメモリバリアを必要としうるから
それに頼った設計は疑問を感じる
今のC++からshared_ptrをそのまま無くせって言ってるんじゃないぞ
shared_ptrのコピーを禁止にしてweak_ptrの対応だけあれば良くないかって事
そもそも何でそんなこと言うかっていうと、
GCない言語→循環参照ガー。みたいによく言われるけど使わないで
済むなら静的解析で循環参照の起こり得るケースをエラーにしてしまう
って解決方法もあるかなと思っただけ
あとshared_ptrとweak_ptrはアトミック操作とメモリバリアを必要としうるから
それに頼った設計は疑問を感じる
2015/11/24(火) 16:37:54.42ID:f4S6RtN7
一応言っとくと静的解析のくだりは新しい言語を
設計するとした場合の話ね
C++だとほぼ不可能だろうから
設計するとした場合の話ね
C++だとほぼ不可能だろうから
2015/11/24(火) 16:39:45.81ID:1SleeXaD
せっかくC#は新設計なのにいろいろ失敗が含まれてるよな。
ヘジはなにやってんだか。
ヘジはなにやってんだか。
57uy ◆Qawu9.2l1E
2015/11/24(火) 18:29:34.50ID:lNjW2jss 大企業は、
中小企業を奴隷にさせる事を第一に考えたツールしかリリースしてないよ
失敗ではなく全部わざと。
中小企業を奴隷にさせる事を第一に考えたツールしかリリースしてないよ
失敗ではなく全部わざと。
2015/11/25(水) 07:39:30.16ID:JnM8vxaH
メモリ管理テケトーなやつはその他のリソース管理もテケトー
2015/11/25(水) 17:12:00.25ID:Sra0FKsR
そもそも自分のリソース管理がしっかり出来てる人は・・・
2015/11/27(金) 12:24:34.85ID:ZRdaHx9T
2015/11/27(金) 22:35:05.80ID:CyIO1ZuX
Rust使えば解決
62デフォルトの名無しさん
2015/11/28(土) 06:44:39.29ID:CKvy7+My 中の細かい実装まで知らないんだけど、
A = new A()
Loop Begin
処理
A = null
A = new A()
Loop End
とか、nullをセットをGCって見張ってるの?又はGCに伝えているとかあるの?
A = new A()
Loop Begin
処理
A = null
A = new A()
Loop End
とか、nullをセットをGCって見張ってるの?又はGCに伝えているとかあるの?
2015/11/28(土) 13:02:34.51ID:Qyl/1Ad+
2015/11/28(土) 13:08:02.55ID:Qyl/1Ad+
いや無駄じゃないか
代入演算子の順序の関係でnewの後に代入が起こるから
Aを事前にnullすることでGCさんが回収できるオブジェクトが1個増える
代入演算子の順序の関係でnewの後に代入が起こるから
Aを事前にnullすることでGCさんが回収できるオブジェクトが1個増える
2015/11/28(土) 13:10:10.16ID:rTI66XO9
書いたほうが保守性は高く、意味がある。
66デフォルトの名無しさん
2015/11/28(土) 13:34:46.98ID:CKvy7+My2015/11/28(土) 13:55:47.33ID:pohBt4lh
null代入なんていちいち書いていたら
コードが冗長になって保守性が落ちる。
メモリ食いのオブジェクトなど、クリティカルな部分でのみ使うべき
コードが冗長になって保守性が落ちる。
メモリ食いのオブジェクトなど、クリティカルな部分でのみ使うべき
2015/11/28(土) 14:16:02.55ID:81goelDj
お前らか。無意味なnull代入書き散らしてるのは
2015/11/28(土) 14:42:43.95ID:DqKP/LxN
null代入とか結局やってることc++以下なんだよなぁ
2015/11/28(土) 14:48:25.74ID:Fi4wDTmy
ダングリングポインタが出ないって利点は有るにはあるが
スマートポインタ使えば済む話だしなぁ
weak_ptrもあるし
スマートポインタ使えば済む話だしなぁ
weak_ptrもあるし
2015/11/28(土) 15:20:08.61ID:vL/aYykM
>>68
意味はあるじゃん
意味はあるじゃん
72デフォルトの名無しさん
2015/11/28(土) 17:52:47.31ID:CKvy7+My2015/11/28(土) 18:23:41.31ID:ekTV2Qou
変数がどこで不要になるか明示しなきゃならんほど長い関数ばっかり書いてるのか
それともローカル変数とか無い言語を想定してるのか
それともローカル変数とか無い言語を想定してるのか
2015/11/28(土) 18:24:46.08ID:q5KJxTWt
無駄なことするな
どうせ最適化で削除される
どうせ最適化で削除される
2015/11/28(土) 18:28:07.06ID:rTI66XO9
保守性より効率重視なんかでコード書くからメモリリークするんだよ。
2015/11/28(土) 19:04:25.52ID:ekTV2Qou
どんな意味でnull代入をしてるのか他人に伝わらなきゃ保守性もクソも無いよね
2015/11/28(土) 19:08:04.34ID:rTI66XO9
a = null;
で伝わらない人にはどんなコメント書いても伝わらないと思うんだ。
で伝わらない人にはどんなコメント書いても伝わらないと思うんだ。
2015/11/28(土) 19:27:35.81ID:pohBt4lh
関数内ローカルな変数は
いくら大きくても大概スコープだけで
どうにでもなる。
javascriptみたいなのはlambdaでスコープ切ればいい。
いくら大きくても大概スコープだけで
どうにでもなる。
javascriptみたいなのはlambdaでスコープ切ればいい。
79デフォルトの名無しさん
2015/11/28(土) 19:54:24.96ID:CKvy7+My2015/11/28(土) 20:10:37.33ID:ekTV2Qou
2015/11/28(土) 20:14:43.65ID:pohBt4lh
永続的な変数でもなきゃ、変数の寿命はコンパイラが把握しているから、null代入がどんな変数にも必要なら勝手に挿入するんじゃね。
そうじゃないとしたら、なんでもかんでもnull代入が必要なんてのは幻想だよ。
そうじゃないとしたら、なんでもかんでもnull代入が必要なんてのは幻想だよ。
2015/11/28(土) 20:16:46.53ID:Fi4wDTmy
勝手にnullを代入するとか、そんな変なコンパイラは困る
2015/11/28(土) 20:47:03.48ID:03HlMXbm
話は変わるんだがスマートポインタのメリットって何?
コンストラクタで例外投げたとき
そこまでに初期化したメンバ変数のデストラクタを呼ぶため
みたいなのは聞いたことあるけどそれくらいのもん?
コンストラクタで例外投げたとき
そこまでに初期化したメンバ変数のデストラクタを呼ぶため
みたいなのは聞いたことあるけどそれくらいのもん?
2015/11/28(土) 21:01:25.91ID:DqKP/LxN
>>83
別にコンストラクタじゃなくて関数内で確保した場合でも、
例外じゃなくreturnで戻った時も勝手に解放してくれたほうが
有り難いし、そもそも解放処理って忘れやすいものだろ
傘を置き忘れたり洗濯物を洗濯機に入れっぱなしにしたことの
ないものだけスマートポインタに石を投げなさい
別にコンストラクタじゃなくて関数内で確保した場合でも、
例外じゃなくreturnで戻った時も勝手に解放してくれたほうが
有り難いし、そもそも解放処理って忘れやすいものだろ
傘を置き忘れたり洗濯物を洗濯機に入れっぱなしにしたことの
ないものだけスマートポインタに石を投げなさい
2015/11/28(土) 21:20:40.16ID:ETFlkHGB
null 代入したら行数増えるじゃん…全部のローカル変数にやってんの?
どうしても明示したければスコープで区切った方がまし
それでもインデントが深くなるのであれだけど
どうしても明示したければスコープで区切った方がまし
それでもインデントが深くなるのであれだけど
2015/11/28(土) 23:46:43.25ID:pohBt4lh
>>82
勝手にnull代入すると表現するから気持ち悪く感じるだけで、コンパイラが各変数についてもうアクセスされる可能性の無い基本ブロックに到達したら、その変数をGCのマークの起点として使用しないようにフラグを管理すると言えば当たり前の話じゃね。
フラグの持ち方として変数にnullを代入しているだけで。
勝手にnull代入すると表現するから気持ち悪く感じるだけで、コンパイラが各変数についてもうアクセスされる可能性の無い基本ブロックに到達したら、その変数をGCのマークの起点として使用しないようにフラグを管理すると言えば当たり前の話じゃね。
フラグの持ち方として変数にnullを代入しているだけで。
2015/11/29(日) 00:14:42.24ID:qbMwzV1h
>>84
> そもそも解放処理って忘れやすいものだろ
それを忘れるなどとんでもない
確保&開放なんてプログラミングの花じゃん
キモじゃん
そこを工夫するのが楽しいんじゃん
設計も楽しいし
チマチマテストすんのも楽しい
温泉行って湯につかり忘れる心配はない
> そもそも解放処理って忘れやすいものだろ
それを忘れるなどとんでもない
確保&開放なんてプログラミングの花じゃん
キモじゃん
そこを工夫するのが楽しいんじゃん
設計も楽しいし
チマチマテストすんのも楽しい
温泉行って湯につかり忘れる心配はない
2015/11/29(日) 00:30:29.12ID:Co3W2iFa
2015/11/29(日) 13:48:13.85ID:U49gaUJj
信じて送り出した >>87 がわがままな顧客を✕✕して三面記事に載るなんて…
2015/11/29(日) 14:29:40.51ID:c+9MHjtm
マークスイープ型のGCが必要かどうかについて、もう少し建設的な会話をしようよ
リソースを自動で開放してくれる機能は、無いよりは有った方が絶対に良い、と言い切ってよいよね
ただ、その方式が話の焦点だと思う
C++のスマポの参照カウンタ方式はデストラクタとの相性が良いし、RAIIもよく機能するし
開放されるタイミングもはっきりしているのて、手続き型言語と相性が良いし、軽い
ただし、循環参照があるとリークする
解決策として、片方をweak_ptrにするという方法が用意されている
weak_ptrは対象オブジェクトが開放されると勝手にヌルポみたいになるのでいろいろと悪用ができる
一方でマークスイープ系のGCは、循環参照があってもリークしない
しかし参照カウンタ方式に比べてマークスイープ系のGCが優れている点は、それだけ
重いし、いつ開放処理が実行されるか分からないので
リソース開放のタイミングを明確に行いたい場合のための別の仕組みが必要になった
どちらを選ぶ?
リソースを自動で開放してくれる機能は、無いよりは有った方が絶対に良い、と言い切ってよいよね
ただ、その方式が話の焦点だと思う
C++のスマポの参照カウンタ方式はデストラクタとの相性が良いし、RAIIもよく機能するし
開放されるタイミングもはっきりしているのて、手続き型言語と相性が良いし、軽い
ただし、循環参照があるとリークする
解決策として、片方をweak_ptrにするという方法が用意されている
weak_ptrは対象オブジェクトが開放されると勝手にヌルポみたいになるのでいろいろと悪用ができる
一方でマークスイープ系のGCは、循環参照があってもリークしない
しかし参照カウンタ方式に比べてマークスイープ系のGCが優れている点は、それだけ
重いし、いつ開放処理が実行されるか分からないので
リソース開放のタイミングを明確に行いたい場合のための別の仕組みが必要になった
どちらを選ぶ?
2015/11/29(日) 14:58:17.95ID:7vkfzAlt
GCの意見・・・OSではページファイル関連?
http://peace.2ch.net/test/read.cgi/tech/1447856699/l50
http://peace.2ch.net/test/read.cgi/tech/1447856699/l50
2015/11/29(日) 15:57:55.75ID:Co3W2iFa
そもそもc++においてメモリリークって対策も発見も
大して難しい部類のバグではないんだよなぁ
GCの優位性をアピールするために過剰に恐怖心を煽ってる気がする
大して難しい部類のバグではないんだよなぁ
GCの優位性をアピールするために過剰に恐怖心を煽ってる気がする
2015/11/29(日) 16:00:08.95ID:sCmmZzWu
>>92
その程度の案件しか受けてないからだろう。
その程度の案件しか受けてないからだろう。
2015/11/29(日) 16:05:07.63ID:QSPcxrGF
2015/11/29(日) 16:15:05.64ID:Co3W2iFa
>>93
いやいや普通難しいとされるバグってメモリ破壊とか同期周りだから
メモリリークなんてデバッガがチェックして丁寧なダンプ出してくれるし
組み込みとかの貧弱な環境なら専用のメモリ管理を用意して
いくらでも好きなチェックや情報出せるから
いやいや普通難しいとされるバグってメモリ破壊とか同期周りだから
メモリリークなんてデバッガがチェックして丁寧なダンプ出してくれるし
組み込みとかの貧弱な環境なら専用のメモリ管理を用意して
いくらでも好きなチェックや情報出せるから
2015/11/29(日) 16:17:37.80ID:AV0cYAnH
97デフォルトの名無しさん
2015/11/29(日) 16:20:05.34ID:3h4H/kBH 忘れるとか忘れないとか池沼レベルの話じゃん。
ゴミクズ。
メモリの解放が必要ならそれは必要な機能の実装ってことになる。
それを忘れるってことはプログラムを組んでいて必要な機能の実装を忘れるってことだ。
必要な機能の実装を忘れるということは、例えば通販サイトのシステム開発請け負っておきながら、決済システムを実装し忘れるのと同等。
ありえない。
プログラム云々以前に頭の問題だろう。
必要な機能の実装を忘れる可能性におびえる池沼プログラマ。
最近流行りのADHD?なんじゃねえの。
ゴミクズ。
メモリの解放が必要ならそれは必要な機能の実装ってことになる。
それを忘れるってことはプログラムを組んでいて必要な機能の実装を忘れるってことだ。
必要な機能の実装を忘れるということは、例えば通販サイトのシステム開発請け負っておきながら、決済システムを実装し忘れるのと同等。
ありえない。
プログラム云々以前に頭の問題だろう。
必要な機能の実装を忘れる可能性におびえる池沼プログラマ。
最近流行りのADHD?なんじゃねえの。
2015/11/29(日) 16:24:33.80ID:sCmmZzWu
>>95
なるほど。経験の少なさがすぐ分るな。ログ出したらで数十ギガなんてよくあるよ。
ログから問題点をスクリプトで抽出するにも何時間とかかるとかいろいろ。
マルチスレッド絡んで特定のパターンだけだったりして再現性がなかったりする。
他システムの連携だと手が出せない部分の挙動がおかしい可能性もある。結局、oracleのバグだったとかね。
なるほど。経験の少なさがすぐ分るな。ログ出したらで数十ギガなんてよくあるよ。
ログから問題点をスクリプトで抽出するにも何時間とかかるとかいろいろ。
マルチスレッド絡んで特定のパターンだけだったりして再現性がなかったりする。
他システムの連携だと手が出せない部分の挙動がおかしい可能性もある。結局、oracleのバグだったとかね。
99デフォルトの名無しさん
2015/11/29(日) 16:25:01.11ID:1uX74bCE100デフォルトの名無しさん
2015/11/29(日) 16:36:20.27ID:Co3W2iFa >>98
はあ?なんでリーク箇所ダンプするだけの話でログ全部吐き出すことになってんの
普通確保する際にヘッダにそのブロックの確保場所埋め込んでるし
アロケータで生存期間のスコープを切り分けといてすぐ分かるようにするけど?
お前の関わったプロジェクトが糞なだけじゃね?
はあ?なんでリーク箇所ダンプするだけの話でログ全部吐き出すことになってんの
普通確保する際にヘッダにそのブロックの確保場所埋め込んでるし
アロケータで生存期間のスコープを切り分けといてすぐ分かるようにするけど?
お前の関わったプロジェクトが糞なだけじゃね?
101デフォルトの名無しさん
2015/11/29(日) 16:42:54.34ID:snjMtaUP そもそも今時c++でgcならなんとかなる類いのメモリリーク起こすなんて、プログラマが屑なだけ。
リソースリークやその他の問題も確実に起こすこと請け合い。
GC言語でそのレベルのプログラマを使うような案件はGCによるメモリオーバーヘッドが気にならず、リソースリークも問題にならないような非常に緩い案件でしかない。
リソースリークやその他の問題も確実に起こすこと請け合い。
GC言語でそのレベルのプログラマを使うような案件はGCによるメモリオーバーヘッドが気にならず、リソースリークも問題にならないような非常に緩い案件でしかない。
102デフォルトの名無しさん
2015/11/29(日) 16:46:22.91ID:sCmmZzWu >>100
はぁ。話にならんな。扱ってる規模が違いすぎる。
はぁ。話にならんな。扱ってる規模が違いすぎる。
103デフォルトの名無しさん
2015/11/29(日) 16:52:06.50ID:Co3W2iFa >>102
おいおい反論できずに捨て台詞かよ
上でも書いたがコンシューマで開発してたから
100人*数年の規模でやってたんだけど
もしかしてC++みたいな危険な言語使ってて
今の今まで解析ツールなり自前のメモリ管理なり知らなかったの?
おいおい反論できずに捨て台詞かよ
上でも書いたがコンシューマで開発してたから
100人*数年の規模でやってたんだけど
もしかしてC++みたいな危険な言語使ってて
今の今まで解析ツールなり自前のメモリ管理なり知らなかったの?
104デフォルトの名無しさん
2015/11/29(日) 19:41:19.37ID:GW0SCIDI お前ら派遣だろw
全体規模とお前らが任されてる範囲を都合よく混ぜるな。
全体規模とお前らが任されてる範囲を都合よく混ぜるな。
105デフォルトの名無しさん
2015/11/29(日) 22:07:37.11ID:3h4H/kBH ほーら、自分の知能が一般人より低いと認めたくないがゆえにレッテル貼りが始まった。
普通の人が当たり前にできることができないってかわいそうだな。
もしADHD?だったら治療法あるらしいから病院行ってみたら?
ここでレッテル貼りやってるよりよっぽど解決する可能性が高いぞ。
普通の人が当たり前にできることができないってかわいそうだな。
もしADHD?だったら治療法あるらしいから病院行ってみたら?
ここでレッテル貼りやってるよりよっぽど解決する可能性が高いぞ。
106デフォルトの名無しさん
2015/11/29(日) 22:12:02.58ID:QSPcxrGF レッテル貼りは2chの華
107デフォルトの名無しさん
2015/11/30(月) 08:34:00.92ID:qSWjFIuy108デフォルトの名無しさん
2015/11/30(月) 09:12:24.63ID:UQyKbzCH >>107
普通C++のプロジェクトは専用のメモリ管理を用意するから
リークしたメモリはそれを確保したクラスとその行数まで特定できるようにしてるよ
アロケーターも分離しとけばアプリケーション終了させなくても
管理オブジェクトを破棄した時点でリークの判定できるし
リーク箇所特定するのに全ログから解析とか複合的なバグでもない限りしない
そんな状況許してる時点で負け
普通C++のプロジェクトは専用のメモリ管理を用意するから
リークしたメモリはそれを確保したクラスとその行数まで特定できるようにしてるよ
アロケーターも分離しとけばアプリケーション終了させなくても
管理オブジェクトを破棄した時点でリークの判定できるし
リーク箇所特定するのに全ログから解析とか複合的なバグでもない限りしない
そんな状況許してる時点で負け
109デフォルトの名無しさん
2015/11/30(月) 12:11:48.62ID:fg7tHWVi 100人で数年のシステムなら
10人で一年でやるべきだな。
人を無駄に増やせば、意思疎通や連携に無駄に労力を割く。
開放云々より仕様レベルで齟齬が出やすくなるわ。
10人で一年でやるべきだな。
人を無駄に増やせば、意思疎通や連携に無駄に労力を割く。
開放云々より仕様レベルで齟齬が出やすくなるわ。
110デフォルトの名無しさん
2015/11/30(月) 15:00:18.02ID:Ee9Jt/HC >>108
リークしたクラスが分ればリーク原因が分るとかお花畑杉w
リークしたクラスが分ればリーク原因が分るとかお花畑杉w
111デフォルトの名無しさん
2015/11/30(月) 19:23:16.25ID:UQyKbzCH112デフォルトの名無しさん
2015/11/30(月) 19:24:12.90ID:Ee9Jt/HC おいおいw
113デフォルトの名無しさん
2015/11/30(月) 19:31:17.77ID:UQyKbzCH >>112
そもそもGCがあろうとコンテナに突っ込んで消し忘れれば
オブジェクト破棄するまでメモリ圧迫し続けるって理解できてる?
リーク単体ならC++はそれと同等のレベルまで分かりやすく出来るんだよ
C++が困難なのはそういった管理情報も簡単に破壊出来てしまう点
リーク単体なら怖くはない
そもそもGCがあろうとコンテナに突っ込んで消し忘れれば
オブジェクト破棄するまでメモリ圧迫し続けるって理解できてる?
リーク単体ならC++はそれと同等のレベルまで分かりやすく出来るんだよ
C++が困難なのはそういった管理情報も簡単に破壊出来てしまう点
リーク単体なら怖くはない
114デフォルトの名無しさん
2015/11/30(月) 19:47:37.41ID:UQyKbzCH なんかだんだん笑えて来たんだけど、ろくに理由も言わずに
「わかんないんですけど!?わかる奴はお花畑(怒)!!」って
なかなか面白い奴だな
「わかんないんですけど!?わかる奴はお花畑(怒)!!」って
なかなか面白い奴だな
115デフォルトの名無しさん
2015/11/30(月) 19:50:22.70ID:isQX20zS メモリの解放すら管理できない奴が、複雑な仕様を管理できるとは到底思えない・・・。
メモリの解放なんてなんの苦にもならんが・・・。
メモリの解放なんてなんの苦にもならんが・・・。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 日本政府に ★2 [おっさん友の会★]
- 中国側が首相答弁の撤回要求、日本側拒否★6 [夜のけいちゃん★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 自民、経済対策で子ども1人に2万円給付へ 児童手当に上乗せ 所要額は約4000億円 [ぐれ★]
- 【高市訃報】ホタテ業者、死亡😇😇😇 [573041775]
- 「日本の保守層のご機嫌を取りながら、中国、ロシア、アメリカのご機嫌も取る」👈こういう総理がいれば良かったよな [762037879]
- 高市早苗 「靖国神社電撃参拝」説が浮上 [163661708]
- 【朗報】ウヨの姫小野田大臣、吠える「何か気に入らないことがあったらすぐに経済威圧をする国に依存するのはリスク」脱アメリカを宣言 [856698234]
- 【終国悲報】高市早苗、たったの10日で莫大な経済的損失を叩き出す [165981677]
- 【緊急】高市早苗 月内辞任か [695089791]
