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
138デフォルトの名無しさん
2015/12/03(木) 14:07:05.91ID:n26CULk9 低レベルなことを舐めるなよ
139デフォルトの名無しさん
2015/12/03(木) 16:32:54.69ID:JraK7tKY140デフォルトの名無しさん
2015/12/03(木) 19:43:25.89ID:R/g8PPkY141デフォルトの名無しさん
2015/12/03(木) 19:47:17.15ID:JraK7tKY >>140
今まで正しいと信じきってた鰯の頭が迷信だと指摘され発狂中
今まで正しいと信じきってた鰯の頭が迷信だと指摘され発狂中
142デフォルトの名無しさん
2015/12/03(木) 19:53:39.75ID:R/g8PPkY >>141おw おまえ会社で孤立してるだろ派遣w
143デフォルトの名無しさん
2015/12/03(木) 20:32:35.32ID:R04IP6VM 確保したやつが解放するんだぞ。大丈夫か?
144デフォルトの名無しさん
2015/12/03(木) 20:33:46.24ID:cWTIfUD3 想像を絶するアホは居るもんだよ
if (cond) exp; の場合も中カッコを必ず付ける流派ってのがあって
理由を聞くと
if (cond) {exp1; exp2;}とするはずが
if (cond) exp1; exp2;としてしまうのを防ぐための常に中カッコらしい
中カッコを書き忘れるくらいの意識レベルで書かれたコードって
他のとこももう全部ダメだろそれは
if (cond) exp; の場合も中カッコを必ず付ける流派ってのがあって
理由を聞くと
if (cond) {exp1; exp2;}とするはずが
if (cond) exp1; exp2;としてしまうのを防ぐための常に中カッコらしい
中カッコを書き忘れるくらいの意識レベルで書かれたコードって
他のとこももう全部ダメだろそれは
145デフォルトの名無しさん
2015/12/03(木) 20:52:03.75ID:s/TINiTx >>144
お前がアホなwww
お前がアホなwww
146デフォルトの名無しさん
2015/12/03(木) 21:25:03.70ID:n26CULk9 カッコ先につけといたほうが 後々、都合がいいことも
147デフォルトの名無しさん
2015/12/03(木) 21:30:08.65ID:WeEbsZB7 アホな書き方といえば
if ( 1 == a ) {
って比較元と先を逆にしてる奴
if ( 1 == a ) {
って比較元と先を逆にしてる奴
148デフォルトの名無しさん
2015/12/03(木) 21:41:57.39ID:4rUKwdGH 別におかしくない
基準値が先にあって、それと比べてaがどうなのか、と考えるか
aが先にあって、基準値と比べてどうなのか、と考えるかの違いでしか無いから
どっちでも良い
基準値が先にあって、それと比べてaがどうなのか、と考えるか
aが先にあって、基準値と比べてどうなのか、と考えるかの違いでしか無いから
どっちでも良い
149デフォルトの名無しさん
2015/12/03(木) 21:59:47.07ID:/xqyH1ID150デフォルトの名無しさん
2015/12/03(木) 22:27:47.14ID:zepIVOGi ここ数日一気にレベルが下がったなw
GCの話しろよw
GCの話しろよw
151デフォルトの名無しさん
2015/12/03(木) 22:46:13.76ID:srgQPG9D つーか前スレと同じこと書いてる人多数
頼むから前スレ読んできて
頼むから前スレ読んできて
152デフォルトの名無しさん
2015/12/04(金) 04:37:18.54ID:HtuddwW0 【 オンラインTCGエディター 】 >>1
デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。
設計思想は 《 RPGツクール 》 が良いかな? 他に、優れたエディター有ったら挙げてみて。
個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。
さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18
デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。
設計思想は 《 RPGツクール 》 が良いかな? 他に、優れたエディター有ったら挙げてみて。
個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。
さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18
153デフォルトの名無しさん
2015/12/04(金) 12:21:13.29ID:GzeAUkqU154デフォルトの名無しさん
2015/12/04(金) 20:05:33.81ID:SAJ9n/s7155デフォルトの名無しさん
2015/12/04(金) 21:16:45.71ID:7W1HEY29 >>151
そもそも15年ぐらい前から延々繰り返されてるんだが…
そもそも15年ぐらい前から延々繰り返されてるんだが…
156デフォルトの名無しさん
2015/12/04(金) 23:45:19.53ID:j6MEWqDN >>154
開放コードを忘れずに書いたのに開放されないという怪奇現象がマルチスレッド状況ではしばしばあるんじゃー!
マルチコア時代になってこれはますます危険になった
見ただけで正しさがわかる系のスレッド安全策はクロックサイクルを糞のごとく消費するし…
こういうのは専門家が徹底的にデバッグしたGCで面倒を見て欲しいと思う反面、
やっぱプロセス全体のごみ処理を選任モジュールにやらせるのはクロックサイクルをドブに捨てるがごとき
センス無い設計なキモス、、
開放コードを忘れずに書いたのに開放されないという怪奇現象がマルチスレッド状況ではしばしばあるんじゃー!
マルチコア時代になってこれはますます危険になった
見ただけで正しさがわかる系のスレッド安全策はクロックサイクルを糞のごとく消費するし…
こういうのは専門家が徹底的にデバッグしたGCで面倒を見て欲しいと思う反面、
やっぱプロセス全体のごみ処理を選任モジュールにやらせるのはクロックサイクルをドブに捨てるがごとき
センス無い設計なキモス、、
157デフォルトの名無しさん
2015/12/05(土) 00:08:28.41ID:+HxrBEdK それ単にメモリバリアの問題じゃ…
158デフォルトの名無しさん
2015/12/05(土) 04:01:37.91ID:2vAbbe+i >>154
入門書に書いてるコードしか見たことないんだね。
スレッドプールみたいなテクニックは高速化のためにみな普通に使うんだよ。
OSやライブラリにもメモリリークなんてよくあることだし、それらのバグも開放忘れて起きてるイージーなバグじゃないよ。
他のバグやトラブルがメモリリークという形で表面化してるにすぎない。
入門書に書いてるコードしか見たことないんだね。
スレッドプールみたいなテクニックは高速化のためにみな普通に使うんだよ。
OSやライブラリにもメモリリークなんてよくあることだし、それらのバグも開放忘れて起きてるイージーなバグじゃないよ。
他のバグやトラブルがメモリリークという形で表面化してるにすぎない。
159デフォルトの名無しさん
2015/12/05(土) 08:28:25.61ID:Pfi54LUx160デフォルトの名無しさん
2015/12/05(土) 09:45:44.55ID:P9ivIQ+p >>159詰めても無意味。
こういう連中は、まず自分の考えややり方が絶対正しく絶対に曲げない。曲げないために無理やり理由を当てはめようとしている。
で、さもそれを自分はやってるように言っているが、実際は単に本に載ってることを言ってるだけ。
実装もできない。面前で詰めてやれば発狂して勝敗がハッキリつくけどネット上では無理だね。
こういう連中は、まず自分の考えややり方が絶対正しく絶対に曲げない。曲げないために無理やり理由を当てはめようとしている。
で、さもそれを自分はやってるように言っているが、実際は単に本に載ってることを言ってるだけ。
実装もできない。面前で詰めてやれば発狂して勝敗がハッキリつくけどネット上では無理だね。
161デフォルトの名無しさん
2015/12/05(土) 09:48:00.71ID:BOwcKS4A メモリの話とスレッドの話を混ぜ込んでしまうタイプは
問題の切り分けがそもそも出来ないタイプ
だからメモリリーク()に悩まされる
スレッド間の協調と、メモリのケアは直交する別の話題
問題の切り分けがそもそも出来ないタイプ
だからメモリリーク()に悩まされる
スレッド間の協調と、メモリのケアは直交する別の話題
162デフォルトの名無しさん
2015/12/05(土) 10:18:00.14ID:NRX1k+Is163デフォルトの名無しさん
2015/12/05(土) 12:34:30.29ID:eGerJrSR だからメモリを自動開放してほしいときはスマートポインタを使えばよいだろ
循環参照が無い限りshared_ptrで問題ないだろ
循環参照がある場合はどちらかをweak_ptrにすれば済む話だろ
現実にshared_ptrの様な物が存在して無いなら、そういう議論も意味があるが
実際にはshared_ptrは現実に有るのだから、自動管理したい場合は使えばよいだけの話でしかない
循環参照が無い限りshared_ptrで問題ないだろ
循環参照がある場合はどちらかをweak_ptrにすれば済む話だろ
現実にshared_ptrの様な物が存在して無いなら、そういう議論も意味があるが
実際にはshared_ptrは現実に有るのだから、自動管理したい場合は使えばよいだけの話でしかない
164デフォルトの名無しさん
2015/12/05(土) 12:38:09.16ID:eGerJrSR むしろ議論すべきはshared_ptrのような参照カウンタ方式のスマポと
言語ビルドインのマークスイープ系のGCとで
どちらが良いか、だろう
参照カウンタ方式は循環参照で問題を起こすし
マークスイープ系のGCはいつ実行されるか分からない
言語ビルドインのマークスイープ系のGCとで
どちらが良いか、だろう
参照カウンタ方式は循環参照で問題を起こすし
マークスイープ系のGCはいつ実行されるか分からない
165デフォルトの名無しさん
2015/12/05(土) 13:11:12.91ID:eGerJrSR つまり、完璧なGCは無いということだ
完璧なGCが無い以上、使う側が状況に合わせて選べた方が良いわけだが
そうなるとC++/CLIのような変体言語しかないのが残念だ
完璧なGCが無い以上、使う側が状況に合わせて選べた方が良いわけだが
そうなるとC++/CLIのような変体言語しかないのが残念だ
166デフォルトの名無しさん
2015/12/05(土) 13:42:35.29ID:FurPG6R/ 普通に言語を選べば良いだけの話では
167デフォルトの名無しさん
2015/12/05(土) 13:49:45.99ID:Pfi54LUx このスレ論点が一致してないよね。
freeやdeleteを記述すべきという論点で話をしている人
freeやdeleteしたところでメモリが解放されてるわけではないですがという論点の人
freeやdeleteは当然、さらにnull等を記述すべきという論点で話をしている人
GCの実装そのものを論点にしている人
論点がばらっばらだから咬み合わない
freeやdeleteを記述すべきという論点で話をしている人
freeやdeleteしたところでメモリが解放されてるわけではないですがという論点の人
freeやdeleteは当然、さらにnull等を記述すべきという論点で話をしている人
GCの実装そのものを論点にしている人
論点がばらっばらだから咬み合わない
168デフォルトの名無しさん
2015/12/05(土) 13:58:32.14ID:wharPYQR169デフォルトの名無しさん
2015/12/05(土) 14:16:25.84ID:2vAbbe+i MSのサイトにfix分と調査中のものが全部公開されてる。他のOSもlog、mlみれば腐るほど出てくる。
10個上げろとか、ほんと幼稚園児かよ、おまえらは。頭悪すぎw
10個上げろとか、ほんと幼稚園児かよ、おまえらは。頭悪すぎw
170デフォルトの名無しさん
2015/12/05(土) 14:33:31.47ID:9PUwCRa0 C++でRAIIを徹底しておくのが一番いいよ
解放タイミングのコントロールが必要になったら後からでも柔軟に対応できるし
GCは解放に係る少し変わった条件が発生した時に滅茶汚いことをしなきゃならなくなる
解放タイミングのコントロールが必要になったら後からでも柔軟に対応できるし
GCは解放に係る少し変わった条件が発生した時に滅茶汚いことをしなきゃならなくなる
171デフォルトの名無しさん
2015/12/05(土) 14:36:53.80ID:NRX1k+Is shareed_ptrはC++で比較的効率よくやれることと、GCしたい人が真にやりたいことの妥協の産物であって
どんなシチュでもベストにフィットするような一押しの決定版ってほどでも無い…
参照カウンタの排他が不要で循環参照が無いことも保証できるまで設計が詰められているなら
スレッドごとに、メモリを確保して使って返す処理を直に書くのが一番良い
どんなシチュでもベストにフィットするような一押しの決定版ってほどでも無い…
参照カウンタの排他が不要で循環参照が無いことも保証できるまで設計が詰められているなら
スレッドごとに、メモリを確保して使って返す処理を直に書くのが一番良い
172デフォルトの名無しさん
2015/12/05(土) 14:43:55.34ID:9PUwCRa0 確保/解放を直に書くのはスピード的には一番速いだろうけど解放漏れバグの温床過ぎてネ
特に例外が絡むとやってられない状況になる
特に例外が絡むとやってられない状況になる
173デフォルトの名無しさん
2015/12/05(土) 14:45:23.69ID:+HxrBEdK >>167
null云々は別言語だ馬鹿
null云々は別言語だ馬鹿
174デフォルトの名無しさん
2015/12/05(土) 14:47:17.08ID:wharPYQR175デフォルトの名無しさん
2015/12/05(土) 14:52:20.59ID:NRX1k+Is >>172
>特に例外が絡むとやってられない状況になる
そこだけはstd::unique_ptr<T>の一押し
これで例外状況でのRAIIが完成するので真にGCが要らんところまで逝く
ていうか大概のアプリなら、例外を生じたらFatal errorなことをユーザーに知らせて終了、でいいんじゃ…
>特に例外が絡むとやってられない状況になる
そこだけはstd::unique_ptr<T>の一押し
これで例外状況でのRAIIが完成するので真にGCが要らんところまで逝く
ていうか大概のアプリなら、例外を生じたらFatal errorなことをユーザーに知らせて終了、でいいんじゃ…
176デフォルトの名無しさん
2015/12/05(土) 14:59:01.89ID:9PUwCRa0 >>175
いやーリソース獲得した状態でファイルI/Oとかネットワークとかが絡む場合は終了じゃすまん場合が多いでしょ
いやーリソース獲得した状態でファイルI/Oとかネットワークとかが絡む場合は終了じゃすまん場合が多いでしょ
177デフォルトの名無しさん
2015/12/05(土) 15:06:58.28ID:MOG2PmhH 昔C言語で数珠繋ぎの独自スコープとしてblock_enter/block_leaveというのを作って
{
block_handle h = block_enter(b)
object = block_create_object(h)
block_leave(h)
}
{
block_handle h = block_enter(b)
object = block_create_object(h)
block_leave(h)
}
178デフォルトの名無しさん
2015/12/05(土) 15:10:52.59ID:MOG2PmhH 書き損じた
昔C言語で数珠繋ぎの独自スコープとしてblock_enter/block_leaveというのを作って
func(b){
block_handle h = block_enter(b)
object = block_create_object(h)
block_leave(b, h)
}
というので例外にも対応したリソースマネージャ作った
block_leave(b, h)せずにスコープ抜けても上位のblock_leaveで開放が保証されたり
block_leave(b, 0)で全開放とかそんなの
昔C言語で数珠繋ぎの独自スコープとしてblock_enter/block_leaveというのを作って
func(b){
block_handle h = block_enter(b)
object = block_create_object(h)
block_leave(b, h)
}
というので例外にも対応したリソースマネージャ作った
block_leave(b, h)せずにスコープ抜けても上位のblock_leaveで開放が保証されたり
block_leave(b, 0)で全開放とかそんなの
179デフォルトの名無しさん
2015/12/05(土) 15:15:45.24ID:MOG2PmhH デメリットはblock_create〜で作成するものは全部ヒープに確保されること
結局C言語でここまで必要な案件てのが回ってこなくてあんま使ってないけどリーク予防法の参考程度に
結局C言語でここまで必要な案件てのが回ってこなくてあんま使ってないけどリーク予防法の参考程度に
180デフォルトの名無しさん
2015/12/05(土) 15:24:40.86ID:4CEShJeO 例外にも対応って?
181デフォルトの名無しさん
2015/12/05(土) 15:29:31.41ID:KdBqlpoa C#でアンマネージドなメモリを扱えるのはわかった
確保したメモリ領域にオブジェクトを配置する事は出来ない?
C++で言うところの配置newを再現したいんだ
メモリの確保解放はプログラマが特別に管理してその間は普通のオブジェクトと同じように透過的に扱いたい
確保したメモリ領域にオブジェクトを配置する事は出来ない?
C++で言うところの配置newを再現したいんだ
メモリの確保解放はプログラマが特別に管理してその間は普通のオブジェクトと同じように透過的に扱いたい
182デフォルトの名無しさん
2015/12/05(土) 15:30:53.84ID:MOG2PmhH183デフォルトの名無しさん
2015/12/05(土) 15:39:23.63ID:eGerJrSR C++にfinallyが無いのが気に食わない
今はラムダが有るのでマクロでそれっぽいものを自作したが
標準で用意しておいてほしい
C++はリソースを自分で管理する傾向のある言語なのに
finallyが無いのは本来おかしいよな
ラッパー作ってRAIIを徹底しろってことなんだろうけど
すべてのリソースに対してラッパーを用意するのは面倒だよ
fainallyが有ったって邪魔になるわけでもないのに
最終的に使うかどうかは利用者が選べばよいことだし
C++ってそういう言語だろ
今はラムダが有るのでマクロでそれっぽいものを自作したが
標準で用意しておいてほしい
C++はリソースを自分で管理する傾向のある言語なのに
finallyが無いのは本来おかしいよな
ラッパー作ってRAIIを徹底しろってことなんだろうけど
すべてのリソースに対してラッパーを用意するのは面倒だよ
fainallyが有ったって邪魔になるわけでもないのに
最終的に使うかどうかは利用者が選べばよいことだし
C++ってそういう言語だろ
184デフォルトの名無しさん
2015/12/05(土) 15:50:01.56ID:9PUwCRa0 >>183
C++にはテンプレートがあるからリソースの型をテンプレート引数とするラッパーを作るのは
そんなに面倒なことじゃないと思う
あとC++でRAIIを徹底してればfainallyの必要性を感じたことはない
fainallyを書かなければいけない時点で危なっかしいコードだと思う
C++にはテンプレートがあるからリソースの型をテンプレート引数とするラッパーを作るのは
そんなに面倒なことじゃないと思う
あとC++でRAIIを徹底してればfainallyの必要性を感じたことはない
fainallyを書かなければいけない時点で危なっかしいコードだと思う
185デフォルトの名無しさん
2015/12/05(土) 16:34:34.82ID:+HxrBEdK むしろfinallyってデストラクタがない言語だから
必要なものなんじゃ…
どうしても必要ならデストラクタで任意のラムダ呼ぶ
ユーティリティクラス作れば同じこと出来るし
必要なものなんじゃ…
どうしても必要ならデストラクタで任意のラムダ呼ぶ
ユーティリティクラス作れば同じこと出来るし
186デフォルトの名無しさん
2015/12/05(土) 16:50:13.74ID:+HxrBEdK 98以前でもローカルクラス定義できるんだからすこし冗長なだけで同じだし
187デフォルトの名無しさん
2015/12/05(土) 16:59:06.52ID:NRX1k+Is 例外発生はバグ、というプログラミングしかしたことないからよくは知らんが、
try {
try {
/*...*/
} catch (std::badalloc()) {
/*...*/
} catch (UserException e) {
/*...*/
}
} catch (...) { // fainally節の代わり
/*...*/
}
じゃあいかんの?実行時コストは知らん
try {
try {
/*...*/
} catch (std::badalloc()) {
/*...*/
} catch (UserException e) {
/*...*/
}
} catch (...) { // fainally節の代わり
/*...*/
}
じゃあいかんの?実行時コストは知らん
188デフォルトの名無しさん
2015/12/05(土) 17:00:08.66ID:NRX1k+Is スマン
誤: } catch (std::badalloc()) {
正: } catch (std::badalloc e) {
誤: } catch (std::badalloc()) {
正: } catch (std::badalloc e) {
189デフォルトの名無しさん
2015/12/05(土) 17:32:52.06ID:+HxrBEdK 違う。そんぐらいググれ
190デフォルトの名無しさん
2015/12/05(土) 17:37:26.87ID:KdBqlpoa デストラクタの問題点は不可視なところだな
usingやfinallyは目に見えるから安心する
usingやfinallyは目に見えるから安心する
191デフォルトの名無しさん
2015/12/05(土) 18:00:14.20ID:NRX1k+Is192デフォルトの名無しさん
2015/12/05(土) 18:22:16.37ID:0v99S3Ys 例外をロジックとして使うなってばっちゃんが言ってた
193デフォルトの名無しさん
2015/12/05(土) 19:38:41.80ID:eGerJrSR >>191
throwせずにreturnするパスが有ったらどうするんだよ
そういうのを防ぐためのfinallyやRAIIなのに
まったくちんぷんかんぷん
結局returnする前に手動で忘れないようにthrowすることを強制するんなら
goto文とか開放用ラムダ呼び出すのとかと替わらないだろ
throwせずにreturnするパスが有ったらどうするんだよ
そういうのを防ぐためのfinallyやRAIIなのに
まったくちんぷんかんぷん
結局returnする前に手動で忘れないようにthrowすることを強制するんなら
goto文とか開放用ラムダ呼び出すのとかと替わらないだろ
194デフォルトの名無しさん
2015/12/05(土) 20:44:27.97ID:ZNw2R9x1 だから忘れる忘れないレベルをぶち込んでくるのは止めようやw
これをぶち込むから全ての議論が池沼レベルになってる
これをぶち込むから全ての議論が池沼レベルになってる
195デフォルトの名無しさん
2015/12/06(日) 06:02:02.37ID:JYyEEHci 異常系で例外返す仕様のライブラリが失敗。
196デフォルトの名無しさん
2015/12/06(日) 08:06:42.75ID:XhferEg+197デフォルトの名無しさん
2015/12/06(日) 11:36:02.06ID:G3VNQyn5 c++のデストラクタって後処理に失敗しても
例外投げられないからウンコ
結果的にエラーを握り潰すゴミコードを量産する原因になってる
例外投げられないからウンコ
結果的にエラーを握り潰すゴミコードを量産する原因になってる
198デフォルトの名無しさん
2015/12/06(日) 11:40:47.08ID:zGnP2wpv そのクラスが管理してる範囲で後処理の失敗って何が起こるの?
199デフォルトの名無しさん
2015/12/06(日) 12:05:41.69ID:kVHO13oj どうしてもやりたいなら対処法はあるしなぁ。
200デフォルトの名無しさん
2015/12/06(日) 12:23:19.67ID:MkaxAbH2 現実的な確率で発生して無視出来ないリスクが有る解放処理はデストラクタでやるべきじゃない
そういうリソースに対してデストラクタがやる事はプログラマに対しいて未解放のリソースを通知する事だけでよい
そういうリソースに対してデストラクタがやる事はプログラマに対しいて未解放のリソースを通知する事だけでよい
201デフォルトの名無しさん
2015/12/06(日) 12:30:12.96ID:XhferEg+ 具体的に何があるん???
クラス内で使っているリソースで解放に失敗(失敗し続ける)するって。
クラス内で使っているリソースで解放に失敗(失敗し続ける)するって。
202デフォルトの名無しさん
2015/12/06(日) 13:14:17.95ID:lk97yytv どっか他のオブジェクトと共有してるものを解放しようとして失敗するとか?
それはそもそもの設計に問題ありすぎだが。。
それはそもそもの設計に問題ありすぎだが。。
203デフォルトの名無しさん
2015/12/06(日) 15:01:28.77ID:XhferEg+ >>202
だよね。
否定しようとして無理やり現象を創りだそうとしているとしか・・・。
でもその無理やりつくった現象は、そもそも論理設計のミスが大前提だったりする。
論理設計のミスまで言われたらなんにも組めないわ。
だよね。
否定しようとして無理やり現象を創りだそうとしているとしか・・・。
でもその無理やりつくった現象は、そもそも論理設計のミスが大前提だったりする。
論理設計のミスまで言われたらなんにも組めないわ。
204デフォルトの名無しさん
2015/12/06(日) 15:42:32.97ID:wxELMJDc >>200
デストラクタの中で起きた例外については
try { } catch (...) { }で囲った上で、リカバリ処理(何とかしてリソース解法漏れをなくす)を行えばいいじゃない?
もし例外発生後に行うべき適切なリカバリ処理が書けない(存在しない)んだとすると、
もはやデストラクタ内に限った話ではなくなって、例外を発生させた時点で設計か実装にバグが居たとしか…
デストラクタの中で起きた例外については
try { } catch (...) { }で囲った上で、リカバリ処理(何とかしてリソース解法漏れをなくす)を行えばいいじゃない?
もし例外発生後に行うべき適切なリカバリ処理が書けない(存在しない)んだとすると、
もはやデストラクタ内に限った話ではなくなって、例外を発生させた時点で設計か実装にバグが居たとしか…
205デフォルトの名無しさん
2015/12/06(日) 16:03:58.23ID:5cQQ9Lrm バグ(リソースへのポインタやハンドルを壊しちゃったとか)以外で
リソース解放に失敗するケースなんて1つも思いつかない
リソース解放に失敗するケースなんて1つも思いつかない
207デフォルトの名無しさん
2015/12/06(日) 16:54:30.29ID:djRjUyAt fflush() しとけばOK
208デフォルトの名無しさん
2015/12/06(日) 16:59:21.77ID:5cQQ9Lrm >>206
fcloseの失敗はハンドルが正しい限りflush時のI/Oエラーの通知であって、その場合でもリソースは解放されるよ
fcloseの失敗はハンドルが正しい限りflush時のI/Oエラーの通知であって、その場合でもリソースは解放されるよ
209デフォルトの名無しさん
2015/12/06(日) 17:35:51.31ID:G3VNQyn5210デフォルトの名無しさん
2015/12/06(日) 17:44:16.50ID:G3VNQyn5 fcloseに失敗してファイルに正常に書き込みされなくてもシカトしてるんだよね?
それともerrnoとかチェックしちゃってるの?
それともerrnoとかチェックしちゃってるの?
211デフォルトの名無しさん
2015/12/06(日) 19:05:12.47ID:RyqEmv/A まあC++の例外を援護するつもりはないがそういう場合は
普通にフラッシュしろよ
そもそもC++が二重例外時にstd::terminate呼ぶのはGCのあるなしに
関係ないからスレ違いだお前ら。よそでやれ
普通にフラッシュしろよ
そもそもC++が二重例外時にstd::terminate呼ぶのはGCのあるなしに
関係ないからスレ違いだお前ら。よそでやれ
212デフォルトの名無しさん
2015/12/06(日) 19:24:21.60ID:XJADMoL5 GCというよりライブラリとの関係だな
.net framework libraryのいくつかのクラスは中で自分自身をロックするから
プログラマ側で参照が切れてもGCされない
.net framework libraryのいくつかのクラスは中で自分自身をロックするから
プログラマ側で参照が切れてもGCされない
213デフォルトの名無しさん
2015/12/06(日) 19:25:02.74ID:XJADMoL5 今日一日なんでFormがGCされないのか調べてて大変な思いしたわ
214デフォルトの名無しさん
2015/12/06(日) 19:31:56.53ID:bkfT5adp >>213
よくそこまで調べたな。( ・∀・)つ旦 お茶ドゾー
よくそこまで調べたな。( ・∀・)つ旦 お茶ドゾー
215デフォルトの名無しさん
2015/12/06(日) 19:37:02.30ID:Gxx7TgqC いまだにプログラマはアセンブリ言語を使えるべきだ派?
216デフォルトの名無しさん
2015/12/06(日) 19:40:49.58ID:JYyEEHci アセンブラ知ってると知らないとじゃスキルレベル全然違うからな。話にならないぐらいのレベル差。
217デフォルトの名無しさん
2015/12/06(日) 20:22:00.43ID:RyqEmv/A まあ実際Java屋とかってコンパイラやメモリ意識できない奴多いよね
以前2chで↓みたいなコードが勝手に最適化されると思って
StringBuilder使う奴は馬鹿!とか言い出す奴いて目眩したわ
String s;
for(int i = 0; i < strarray.length; ++i){ s += strarray[i]; }
以前2chで↓みたいなコードが勝手に最適化されると思って
StringBuilder使う奴は馬鹿!とか言い出す奴いて目眩したわ
String s;
for(int i = 0; i < strarray.length; ++i){ s += strarray[i]; }
218デフォルトの名無しさん
2015/12/06(日) 20:58:14.61ID:wxELMJDc >>217
それはStringの+=の実装次第ではあんまり差が付かないケースなんじゃ…
(左辺と右辺が別の実体である(アドレスが違う)ケースでは多分右辺を左辺の末尾に1回コピーするだけという実装が有り得る
真に糞なのは
StringBuilder sb;
String s = "Hello";
sb.Append("[" + s + "]");
が遅いからStringBuilderは糞、と結論付けるニンゲンであってコードではない、
みたいな?
それはStringの+=の実装次第ではあんまり差が付かないケースなんじゃ…
(左辺と右辺が別の実体である(アドレスが違う)ケースでは多分右辺を左辺の末尾に1回コピーするだけという実装が有り得る
真に糞なのは
StringBuilder sb;
String s = "Hello";
sb.Append("[" + s + "]");
が遅いからStringBuilderは糞、と結論付けるニンゲンであってコードではない、
みたいな?
219デフォルトの名無しさん
2015/12/06(日) 21:26:17.35ID:IAFYzi6n >>217みたいにループ中で一個づつくっつける場合は別にして
s = a + b + c + d; // このように、高々数個をくっつけてる場合は
Javaだと無駄にStringBufferが作られてダメと言うのが定説だったが
C#の場合は内部的にString#Concatに置き換えられて
それによって
StringBuilder b = 略
s = a.Append(b)中略.Append(d).ToString()
するより早い、という話題があってそれと勘違いしたのかもね
s = a + b + c + d; // このように、高々数個をくっつけてる場合は
Javaだと無駄にStringBufferが作られてダメと言うのが定説だったが
C#の場合は内部的にString#Concatに置き換えられて
それによって
StringBuilder b = 略
s = a.Append(b)中略.Append(d).ToString()
するより早い、という話題があってそれと勘違いしたのかもね
220デフォルトの名無しさん
2015/12/06(日) 21:28:20.04ID:IAFYzi6n いちおう訂正しとこw
StringBuilder sb = 略
s = sb.Append(a)中略.Append(d).ToString()
StringBuilder sb = 略
s = sb.Append(a)中略.Append(d).ToString()
221デフォルトの名無しさん
2015/12/06(日) 21:50:20.98ID:MkaxAbH2 そもそもその最適化は仕様なのか
222デフォルトの名無しさん
2015/12/06(日) 22:27:08.91ID:RyqEmv/A223デフォルトの名無しさん
2015/12/07(月) 01:50:02.58ID:3Z+aJEnB >>222
実装云々でなんで演算子オーバーロードがでてくるんだ?
実装云々でなんで演算子オーバーロードがでてくるんだ?
224デフォルトの名無しさん
2015/12/07(月) 05:22:13.32ID:QznWTKRS 逆だろ?
C#との勘違いでないなら、その最適化されるJVM実装とやらを示さないと
C#との勘違いでないなら、その最適化されるJVM実装とやらを示さないと
225デフォルトの名無しさん
2015/12/07(月) 07:11:57.22ID:X5Y+ON7N >>219
全く逆の認識してないか?
classファイル解析したら分かるけど、ループ中の+=の方が問題で毎回newされるから遅い
s = a + b + c + d の方は一つしかStringBuilderのインスタンスは作られない
全く逆の認識してないか?
classファイル解析したら分かるけど、ループ中の+=の方が問題で毎回newされるから遅い
s = a + b + c + d の方は一つしかStringBuilderのインスタンスは作られない
226デフォルトの名無しさん
2015/12/07(月) 08:02:18.14ID:nEG5/lEo こうやって、比較的プログラミングという行為を好きでいる・好きでやっている・興味を持っているという人ですらまともに言語仕様を理解出来ていない。
malloc、freeで管理、GCで管理だと、機構の複雑さは後者。
結局GCもその機構を正しく理解しないと参照が切れてない、参照が切れていても別のリソースが・・・と。
機構を正しく理解していることが前提なら、機構はシンプルなほうがいい。
その点を誤ったから
>プログラマをメモリ管理から開放する!
>といいつつ、メモリリーク問題の文献が大量にある。
>これすなわち、メモリリーク問題が全然解決していないということ。
>さらに、メモリ解放のタイミングの文献まで大量に生み出した。
>これすなわち、新たなるメモリ管理に関する問題を生み出したということ。
なんてことになったんだろうね
malloc、freeで管理、GCで管理だと、機構の複雑さは後者。
結局GCもその機構を正しく理解しないと参照が切れてない、参照が切れていても別のリソースが・・・と。
機構を正しく理解していることが前提なら、機構はシンプルなほうがいい。
その点を誤ったから
>プログラマをメモリ管理から開放する!
>といいつつ、メモリリーク問題の文献が大量にある。
>これすなわち、メモリリーク問題が全然解決していないということ。
>さらに、メモリ解放のタイミングの文献まで大量に生み出した。
>これすなわち、新たなるメモリ管理に関する問題を生み出したということ。
なんてことになったんだろうね
227デフォルトの名無しさん
2015/12/07(月) 08:12:44.70ID:EA/TwAsy そもそもプログラマの大半にマネージリソース、アンマネージリソースとはなに?
って質問してまともに回答できる割合がどんなもんになるのか
始めたら終わらせる
これワンセットね
にしたほうがミスはなくなるかと
ファイル開いたら閉じる
メモリ確保したら解放する
通信接続したら切断する
って質問してまともに回答できる割合がどんなもんになるのか
始めたら終わらせる
これワンセットね
にしたほうがミスはなくなるかと
ファイル開いたら閉じる
メモリ確保したら解放する
通信接続したら切断する
228デフォルトの名無しさん
2015/12/07(月) 09:22:45.43ID:q5G1dKJA やっぱりARC最強だな
229デフォルトの名無しさん
2015/12/07(月) 15:38:30.00ID:6rSJBSiX 結局いつ開放されるか分からないってのが曲者で
使い終わったら確実にリソースを開放してほしいときは
別の仕組みが必要になってしまったってのが問題だろう
その別の仕組も、C++のデストラクタのようにクラスのメンバに関して
芋づる式に呼び出す仕組みがないから
C++のデストラクタがやっていることを手動で再現しなければならない始末
一方でC++のスマポなどの参照カウンタ方式は循環参照だけが問題だが
それ以外の問題が一切発生しない、デメリットは循環参照だけ
しかも循環参照が発生する場合は片方をweak_ptrにすれば良い
ということが分かりきっているし、循環参照が発生する箇所も
設計段階でわかる
循環参照に気を配れる知能が有るのであれば、参照カウンタ方式のほうがスマート
使い終わったら確実にリソースを開放してほしいときは
別の仕組みが必要になってしまったってのが問題だろう
その別の仕組も、C++のデストラクタのようにクラスのメンバに関して
芋づる式に呼び出す仕組みがないから
C++のデストラクタがやっていることを手動で再現しなければならない始末
一方でC++のスマポなどの参照カウンタ方式は循環参照だけが問題だが
それ以外の問題が一切発生しない、デメリットは循環参照だけ
しかも循環参照が発生する場合は片方をweak_ptrにすれば良い
ということが分かりきっているし、循環参照が発生する箇所も
設計段階でわかる
循環参照に気を配れる知能が有るのであれば、参照カウンタ方式のほうがスマート
230デフォルトの名無しさん
2015/12/07(月) 17:29:26.60ID:nEG5/lEo >>229
処理速度やタイミングがシビアな組み込みや科学技術計算系とかならいざしらず、
ソレ以外は、実際の解放のタイミング自体は問題にならんでしょ。(膨大なメモリの使用も別だけど)
問題は、使い終わったよーって明示しないで良い。という運用が結局、悪い結果をもたらしているという点。
メモリの管理をしっかり最後までやるクセのないプログラマは、
平然と参照が途切れている可能性のあるポイントで参照しに行こうとする。
結局は、そいつがバカだからに集約されてしまうんだけど、使い終わりの明示をしない文化がバカを生む土壌となっている
処理速度やタイミングがシビアな組み込みや科学技術計算系とかならいざしらず、
ソレ以外は、実際の解放のタイミング自体は問題にならんでしょ。(膨大なメモリの使用も別だけど)
問題は、使い終わったよーって明示しないで良い。という運用が結局、悪い結果をもたらしているという点。
メモリの管理をしっかり最後までやるクセのないプログラマは、
平然と参照が途切れている可能性のあるポイントで参照しに行こうとする。
結局は、そいつがバカだからに集約されてしまうんだけど、使い終わりの明示をしない文化がバカを生む土壌となっている
231デフォルトの名無しさん
2015/12/07(月) 18:21:02.44ID:q5G1dKJA そういう事になる原因ってさ、構造がぐちゃぐちゃでオブジェクト間も依存しまくって、
いつ解放していいのかわかんねえーというヘボいプログラミングなんだろうなと思う。
いつ解放していいのかわかんねえーというヘボいプログラミングなんだろうなと思う。
232デフォルトの名無しさん
2015/12/07(月) 18:23:12.12ID:tBfENkIS と馬鹿なSEやPGはそう思うだろうなとも思う。
233デフォルトの名無しさん
2015/12/07(月) 19:54:31.23ID:GogXEvJk ある意味メモリなんて一番扱いやすいリソースだからな。
メモリの管理すら適当なプログラマが、他のリソースを適切に扱える訳がないのに、GC前提の言語ではそちらのケアが言語側でやりづらくなってしまっている。
メモリの管理すら適当なプログラマが、他のリソースを適切に扱える訳がないのに、GC前提の言語ではそちらのケアが言語側でやりづらくなってしまっている。
234デフォルトの名無しさん
2015/12/07(月) 20:05:22.53ID:W4QZalq7 メモリ意識した時点で雑魚プログラマ決定だろ。
JavaScriptもPascalも使えないんじゃ話にならないよ。
おちんぽ見られることを意識しすぎて温泉に入れないようなもの。
癒やしのない人生に刺激なんてない。←これ名言
JavaScriptもPascalも使えないんじゃ話にならないよ。
おちんぽ見られることを意識しすぎて温泉に入れないようなもの。
癒やしのない人生に刺激なんてない。←これ名言
235デフォルトの名無しさん
2015/12/07(月) 20:07:43.02ID:nEG5/lEo >>231
そう。そういう状態にしちゃう原因が、いい加減なメモリの管理で教育された結果にあるのではないか?ということで。
そう。そういう状態にしちゃう原因が、いい加減なメモリの管理で教育された結果にあるのではないか?ということで。
236デフォルトの名無しさん
2015/12/07(月) 20:09:47.14ID:nEG5/lEo237デフォルトの名無しさん
2015/12/07(月) 20:16:31.05ID:ZNsl6+sP メモリ意識しないプログラマとかカスだろ。
238デフォルトの名無しさん
2015/12/07(月) 20:42:25.43ID:wP/KA6jo JavaやC#ではリソースをプログラマが管理してはいけない
せっかくメモリ管理を透過的にしたのにリソース管理でコードをより複雑化させては意味がない
真っ当な教育を受けた少数のプログラマがSafeHandleを作成する
末端のプログラマはSafeHandleのファイナライザに全てを任せてメモリと同様にリソースを完全に透過的に扱うべきだ
せっかくメモリ管理を透過的にしたのにリソース管理でコードをより複雑化させては意味がない
真っ当な教育を受けた少数のプログラマがSafeHandleを作成する
末端のプログラマはSafeHandleのファイナライザに全てを任せてメモリと同様にリソースを完全に透過的に扱うべきだ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 立民・岡田氏の質疑「不適切」 維新・藤田氏、台湾有事答弁巡り [蚤の市★]
- 4:44:44.444
- 【愛国者悲報】ナマコ、中国、香港、台湾しか食ってない...台湾はいいけど他ってどーなんの?漁師はどこに売ればいいんだこれ... [856698234]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- そもそも日本て中国に日沈む国だとか無礼な事言ってたよね
- 頭ガンガンガンガン
- アニメでよく日本人キャラなのに目の色だけ変えたりしてるのあるじゃん?
