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
547デフォルトの名無しさん
2016/04/25(月) 20:35:07.72ID:4DDlKiNG >>543
どこからマークを始めるかが問題
どこからマークを始めるかが問題
548デフォルトの名無しさん
2016/04/29(金) 18:58:56.34ID:I1ppYkAy549デフォルトの名無しさん
2016/04/29(金) 22:46:31.85ID:wZxrhoKH C++/CLIはデストラクタが呼ばれるだけで、managedメモリの解放がGC任せなのは変わらんよ。
550デフォルトの名無しさん
2016/05/01(日) 07:57:30.30ID:tKi6j9CT 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
w
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
w
551デフォルトの名無しさん
2016/05/01(日) 09:11:45.10ID:qHyjCjkk 無視リストに追加と
552デフォルトの名無しさん
2016/05/02(月) 21:54:41.51ID:KYdaomRZ GCCは失敗、Clangを使え。
553デフォルトの名無しさん
2016/05/02(月) 22:21:36.97ID:btgv3pKW うるせーバーカ
554デフォルトの名無しさん
2016/05/04(水) 17:42:43.75ID:M8+arjAJ gccは失敗。
555デフォルトの名無しさん
2016/05/27(金) 12:06:01.84ID:FwT+WNvC 良スレ発見した。Windowsは32bitで十分だな。32bitでもPAEで4GB超の
メモリ認識するし、仮想メモリは4GBのままだが、AWEを使うことにより
バンク切り替え的にメモリウインドウを切り替えられる
メモリ認識するし、仮想メモリは4GBのままだが、AWEを使うことにより
バンク切り替え的にメモリウインドウを切り替えられる
556デフォルトの名無しさん
2016/05/27(金) 19:30:30.19ID:hSijlNU2 >>555
アプリはよくてもカーネルはつらい
アプリはよくてもカーネルはつらい
557デフォルトの名無しさん
2016/05/28(土) 04:39:26.17ID:rTGB9SNh メモリーは俺が確保してやる、任せろ。
558デフォルトの名無しさん
2016/05/29(日) 07:51:44.19ID:Ai+IvVh7 おう、この手は絶対、絶対に、死んでも離さねぇ!!
559デフォルトの名無しさん
2016/05/29(日) 11:50:15.87ID:9WWbP5OA OSに載った気持ちでいなさい
560デフォルトの名無しさん
2016/05/31(火) 22:56:21.68ID:mtPUDASJ >>1みたいなやつは
研究室にヒキって、社会に出たことないんやろ
おまえ、本気の糞コードで書かれたペチプ〜とか見たらチビるで
あんなんに加えてメモリ管理なんてやらせたら
それこそHELLO END OF THE WORLD
この世の終わりですわ
研究室にヒキって、社会に出たことないんやろ
おまえ、本気の糞コードで書かれたペチプ〜とか見たらチビるで
あんなんに加えてメモリ管理なんてやらせたら
それこそHELLO END OF THE WORLD
この世の終わりですわ
561デフォルトの名無しさん
2016/06/07(火) 12:20:18.65ID:4vppD7oq >>558
死んだら離せw
死んだら離せw
562デフォルトの名無しさん
2016/06/12(日) 09:40:01.67ID:mfUrI2Z0 死後硬直ですね
563デフォルトの名無しさん
2016/06/18(土) 23:15:40.44ID:03AgrRUX 指摘してるレスがなかったので言っとくが
循環参照は参照カウント方式+Cycle Collectorでも回収できるから
GCは必須じゃないぞ
興味があるならBacon Cycle Collectorで調べてみろ
循環参照は参照カウント方式+Cycle Collectorでも回収できるから
GCは必須じゃないぞ
興味があるならBacon Cycle Collectorで調べてみろ
564デフォルトの名無しさん
2016/06/18(土) 23:22:46.70ID:/B2fY0/K 学生の頃は循環参照できないことに困ってたけど、今となっては何時
循環参照が必要になるかさえ思い出せんな。
循環参照が必要になるかさえ思い出せんな。
565デフォルトの名無しさん
2016/06/19(日) 21:38:00.28ID:evh9vaek 双方向リスト構造
566デフォルトの名無しさん
2016/06/19(日) 22:17:16.01ID:ao4WLgfX567デフォルトの名無しさん
2016/06/20(月) 01:16:50.71ID:30YoNw6z (コンパクションしてくれるんだろうか)
568デフォルトの名無しさん
2016/06/22(水) 08:52:46.04ID:I9Ep4uZo vmが諸悪の根源な気がしてきた
569デフォルトの名無しさん
2016/07/06(水) 07:12:12.60ID:aYInvTWe >>568
まずガベージだらけの頭の中を整理すべき
まずガベージだらけの頭の中を整理すべき
570デフォルトの名無しさん
2016/07/16(土) 10:10:08.78ID:+8wH/95N >>565
別に
単方向リストでもなるだろJK
ていうかリストの要素をshared_ptrにするのは現代でも有効
リストのリンクヘッダ自体の寿命は要素が明示的にdeleteされるかリスト全体が廃棄されるまでなので
リンクヘッダも管理したければリスト固有のストレージ丸ごとな単位でshared_ptrにしたら良い、
希ガス
別に
単方向リストでもなるだろJK
ていうかリストの要素をshared_ptrにするのは現代でも有効
リストのリンクヘッダ自体の寿命は要素が明示的にdeleteされるかリスト全体が廃棄されるまでなので
リンクヘッダも管理したければリスト固有のストレージ丸ごとな単位でshared_ptrにしたら良い、
希ガス
571デフォルトの名無しさん
2016/07/16(土) 10:13:41.67ID:+8wH/95N △: リストの要素
○: リストの要素が保持するデータ
つか開放タイミングをshared_ptrに任せておk、などという発想のは管理しているうちに含めれないがな…
○: リストの要素が保持するデータ
つか開放タイミングをshared_ptrに任せておk、などという発想のは管理しているうちに含めれないがな…
572デフォルトの名無しさん
2016/07/16(土) 10:38:52.53ID:6AR6MH2z 一般のグラフじゃなくてリスト構造の話だろ?
双方向リストはheadとtailへの参照があるが、単方向リストで循環参照は生じようがないが。
双方向リストはheadとtailへの参照があるが、単方向リストで循環参照は生じようがないが。
573デフォルトの名無しさん
2016/07/16(土) 11:51:50.13ID:+8wH/95N574デフォルトの名無しさん
2016/08/22(月) 17:06:41.08ID:oW9zLe2W 循環してるかは後付けでオブジェクトをマークすれば判るんだし
扱うデータ構造から可能性の有無は予測できるし循環自体は大した問題じゃないよ
あ、これリークするなと思ったら対策すればいいだけ
問題は他人様のブラックボックスなライブラリを使う場合
扱うデータ構造から可能性の有無は予測できるし循環自体は大した問題じゃないよ
あ、これリークするなと思ったら対策すればいいだけ
問題は他人様のブラックボックスなライブラリを使う場合
575デフォルトの名無しさん
2016/08/22(月) 19:24:37.36ID:csr3LedD ?
今の議論はプログラマーが何も考えないアホでもGC(言語)使ってれば問題無いのか
そうでなければ結局なんらかの管理が必要でちゃんとする事しないとリークするから本質的には管理から開放されないよねって話だと思うが
今の議論はプログラマーが何も考えないアホでもGC(言語)使ってれば問題無いのか
そうでなければ結局なんらかの管理が必要でちゃんとする事しないとリークするから本質的には管理から開放されないよねって話だと思うが
576デフォルトの名無しさん
2016/08/22(月) 19:33:58.37ID:01M+MFvA いまどきの子はブラウザアプリしか作れないから
ブラウザ再起動とかページ遷移で解決でしょうな
ブラウザ再起動とかページ遷移で解決でしょうな
577デフォルトの名無しさん
2016/08/23(火) 19:56:22.47ID:cEt4cHHx 現在のGCが不完全なだけであって、
メモリは人が管理すべきでないという考え自体は正しいよ。
メモリは人が管理すべきでないという考え自体は正しいよ。
578デフォルトの名無しさん
2016/08/23(火) 20:17:10.56ID:xIKUFX4H 潤沢なメモリを用意してGCしない戦略
起動時間に限ってGCしなくても問題ない範囲であればGCしない戦略
結局こういうのが勝つ
起動時間に限ってGCしなくても問題ない範囲であればGCしない戦略
結局こういうのが勝つ
579デフォルトの名無しさん
2016/08/23(火) 20:29:14.30ID:uPhg+qti プロセスを細かく分けて寿命を短くすればそんなの考えなくて済む
580デフォルトの名無しさん
2016/08/24(水) 13:32:09.69ID:2RMcAgaj 本当の意味での軽量プロセスをOSがサポートしてくれたら良いんだけどね
メモリプールみたいなもんなんだけど、OSのリソースも紐づいてて
メモリプール解放時にOSのリソースもちゃんと解放されるようなもの
マルチプロセスは非常に強力で良いんだけど
メモリ空間が別になるから色々面倒だしパフォーマンスも出にくい
世の中には呼び出したらしばらく処理が返ってこない時間のかかる関数があるけど
とうぜんUIが固まったら困るから別スレッドで実行するわけだけど
処理中にユーザーがキャンセルボタンを押したとき
処理を中断する手段が関数側に用意されてなかったりすると、困る
外からスレッドごと殺しても、リソースリークの問題が出る
真っ先に困るのが同期オブジェクト
同期オブジェクトを握った状態で死なれると、それ以降デッドロックを引き起こす
それ以外にも、プログラムの整合性が壊れているかもしれないので、以降正しく動く保証がない
だから別プロセスで実行して、キャンセルされたときはプロセスごと殺すしか方法が無い
しかし別プロセスにするとメモリ空間が繋がってないので面倒
だからその中間がほしい
メモリプールみたいなもんなんだけど、OSのリソースも紐づいてて
メモリプール解放時にOSのリソースもちゃんと解放されるようなもの
マルチプロセスは非常に強力で良いんだけど
メモリ空間が別になるから色々面倒だしパフォーマンスも出にくい
世の中には呼び出したらしばらく処理が返ってこない時間のかかる関数があるけど
とうぜんUIが固まったら困るから別スレッドで実行するわけだけど
処理中にユーザーがキャンセルボタンを押したとき
処理を中断する手段が関数側に用意されてなかったりすると、困る
外からスレッドごと殺しても、リソースリークの問題が出る
真っ先に困るのが同期オブジェクト
同期オブジェクトを握った状態で死なれると、それ以降デッドロックを引き起こす
それ以外にも、プログラムの整合性が壊れているかもしれないので、以降正しく動く保証がない
だから別プロセスで実行して、キャンセルされたときはプロセスごと殺すしか方法が無い
しかし別プロセスにするとメモリ空間が繋がってないので面倒
だからその中間がほしい
581デフォルトの名無しさん
2016/08/24(水) 16:03:33.76ID:Ku8YOB4B erlang最強
582デフォルトの名無しさん
2016/08/24(水) 19:53:51.27ID:B7v3wZLf 軽量プロセスより重量スレッドの方が実現できそう。
583デフォルトの名無しさん
2016/08/24(水) 20:02:24.36ID:971rg3P3 いつ無くなってしまうかわからんようなメモリのアクセスが簡単になってもほとんど使いみちないだろ。
安全性重視なら別プロセスにして、必要なデータだけ共有メモリで受け渡してのが妥当なところだろう。
安全性重視なら別プロセスにして、必要なデータだけ共有メモリで受け渡してのが妥当なところだろう。
584デフォルトの名無しさん
2016/08/24(水) 20:18:52.71ID:2RMcAgaj 結論から言うと、Windowsにforkが無いのが面倒すぎるってことなんだけどね
585デフォルトの名無しさん
2016/08/24(水) 20:32:21.12ID:N/sC1Ga3586デフォルトの名無しさん
2016/08/24(水) 22:11:21.77ID:2RMcAgaj いやそんなもん、中断する手立てが用意されている方が珍しいだろ
587デフォルトの名無しさん
2016/08/24(水) 22:31:11.60ID:N/sC1Ga3 >>586
で、具体的には出せないと言うことね
で、具体的には出せないと言うことね
588デフォルトの名無しさん
2016/08/25(木) 11:39:37.19ID:rs2QvvZe 元々はスレッドが軽量プロセスって呼ばれていたりしたんだがな(アドレス空間の切り替えが不要だからプロセスより切り替えが軽い)
まあそれはおいておいて
forkを使うと軽量プロセス?とやらの機能が実現できるらしい理屈がわからない
forkしたら別プロセスだぞ?
vforkとかなら実行直後は共有しているけど変更を加えた時点で分かれるし
まあどちらにしろGCじゃメモリーをはじめとする資源管理からは完全には解放されないって事だ
まあそれはおいておいて
forkを使うと軽量プロセス?とやらの機能が実現できるらしい理屈がわからない
forkしたら別プロセスだぞ?
vforkとかなら実行直後は共有しているけど変更を加えた時点で分かれるし
まあどちらにしろGCじゃメモリーをはじめとする資源管理からは完全には解放されないって事だ
589デフォルトの名無しさん
2016/08/25(木) 11:59:23.81ID:8gaIkILP メモリ空間がつながっていること自体はそれほど考慮してないんよ
単にWindowsはマルチプロセスがしにくい
forkあったらちょっとした処理を別プロセスで実行するの、便利じゃん
片づけはプロセスごと殺して終わりだし
単にWindowsはマルチプロセスがしにくい
forkあったらちょっとした処理を別プロセスで実行するの、便利じゃん
片づけはプロセスごと殺して終わりだし
590デフォルトの名無しさん
2016/08/25(木) 15:41:54.51ID:8f3yfXIl ほしいのはLinuxでいうclone(2)やね
591デフォルトの名無しさん
2016/09/03(土) 00:41:24.79ID:XSHFkVCg https://cedil.cesa.or.jp/cedil_sessions/view/1484
リアルタイムGCの実装が凄い
リアルタイムGCの実装が凄い
592デフォルトの名無しさん
2016/10/22(土) 08:52:04.68ID:v44cYKg6 GCもハードウェアに支援させれば全部解決するよ
リアルタイム処理含めてね
リアルタイム処理含めてね
593デフォルトの名無しさん
2016/10/22(土) 10:51:46.42ID:O48rD9qT 再起動最強説
594デフォルトの名無しさん
2016/11/14(月) 22:33:26.01ID:A2iFoZHP 固定領域として静的にグローバル変数化、バッファ化すればいいだろ、
それを汚い言うやつがいるが、
潜在BUGだらけでどうにもできないそれのほうが汚いわ。
それを汚い言うやつがいるが、
潜在BUGだらけでどうにもできないそれのほうが汚いわ。
595デフォルトの名無しさん
2016/11/14(月) 23:45:18.91ID:JD+cxKWX 例えばChromeとかFirefoxとかが静的にメモリアロケートしてたらどうなるか
596デフォルトの名無しさん
2016/11/14(月) 23:59:22.37ID:f4osfHdm そういう発想、嫌いじゃないよ
静的にできるものは、なるべく静的にすべし
俺もそう思う
妙なからくりじみたことにはもう興味が湧かなくなった
最初のころはGCのメカニズムが面白いと感じていたが、もうそういうの、無い
いかに静的にシンプルに書くか、こっちのがパズルみたいで面白い
すべての事は明確であるべきで、コードはそのようになっているべきだ、と
俺が特に嫌いなのは、何がどの順番に実行されるか、コードを見ただけで
よくわからない類のプログラムだ
コールバックも基本的に嫌いだ
なのでいつ実行されるか分からないマークスイープGCは好きではない
参照カウンタ方式のほうが根本的に安全であり、シンプルであると思う
というのも参照カウンタ方式のGCはバグの再現性があるから
唯一の問題は循環参照だが、これも弱い参照を使えば解決する
たったそれだけの工夫でマークスイープGCの複雑な仕組みがいらなくなるなら
おれはそちらのほうが良いと考える
開放するというただそれだけのことに、あれだけ巨大な仕組みが必要になるのはおかしい
静的にできるものは、なるべく静的にすべし
俺もそう思う
妙なからくりじみたことにはもう興味が湧かなくなった
最初のころはGCのメカニズムが面白いと感じていたが、もうそういうの、無い
いかに静的にシンプルに書くか、こっちのがパズルみたいで面白い
すべての事は明確であるべきで、コードはそのようになっているべきだ、と
俺が特に嫌いなのは、何がどの順番に実行されるか、コードを見ただけで
よくわからない類のプログラムだ
コールバックも基本的に嫌いだ
なのでいつ実行されるか分からないマークスイープGCは好きではない
参照カウンタ方式のほうが根本的に安全であり、シンプルであると思う
というのも参照カウンタ方式のGCはバグの再現性があるから
唯一の問題は循環参照だが、これも弱い参照を使えば解決する
たったそれだけの工夫でマークスイープGCの複雑な仕組みがいらなくなるなら
おれはそちらのほうが良いと考える
開放するというただそれだけのことに、あれだけ巨大な仕組みが必要になるのはおかしい
597デフォルトの名無しさん
2016/11/15(火) 00:00:47.13ID:PldPJ2O3 マークスイープ系GCはメモリ管理に関しては完璧かもしれないが
それ以外のリソースの面倒は一切見てくれない
そういったものはファイナライザで開放すればよいわけだが
要らなくなったらすぐさま開放してほしい時に困るので、例えばC#ではDisposeを用意している
しかしながら根本的に本当にDisposeを呼んで良いのかは誰にもわからない部分がある
もしかしたら他の誰かが使用中かもしれない、という場面もありうる
だから誰も使ってないことをプログラマが保証する格好になる
その意味ではfree()と大差ないわけで
usingという構文が用意されていて、ある程度自動で呼ばれるというだけである
本当に誰も使ってないことを保証するにはマークスイープを走らせなければわからない
しかしマークスイープはコストがかかるので、そんな都度都度気軽に走らせられない
その点、参照カウンタ方式は参照カウンタを見るだけで使われているかどうかわかるので
都度都度チェックできるし、要らなくなったらその場で即開放できるので
Disposeのような仕組みもいらず、解放処理をデストラクタに一本化できるし
スマポを使えばデストラクタ自体、書く必要すらないかもしれない
そして有り難いことに、デストラクタはメンバ変数やベースクラスに対しても
芋づる式に自動で呼ばれる
これはDisposeには無い機能だ
何故無いのか?答えは、勝手にDisposeして良いのかどうか、コンパイラは判断がつかないからだ
誰か他の人が使っているかもしれないわけで、勝手にDispose出来ない
Disposeして良いかどうかはプログラマが保証しなければならないので自動化できないのだ
それ以外のリソースの面倒は一切見てくれない
そういったものはファイナライザで開放すればよいわけだが
要らなくなったらすぐさま開放してほしい時に困るので、例えばC#ではDisposeを用意している
しかしながら根本的に本当にDisposeを呼んで良いのかは誰にもわからない部分がある
もしかしたら他の誰かが使用中かもしれない、という場面もありうる
だから誰も使ってないことをプログラマが保証する格好になる
その意味ではfree()と大差ないわけで
usingという構文が用意されていて、ある程度自動で呼ばれるというだけである
本当に誰も使ってないことを保証するにはマークスイープを走らせなければわからない
しかしマークスイープはコストがかかるので、そんな都度都度気軽に走らせられない
その点、参照カウンタ方式は参照カウンタを見るだけで使われているかどうかわかるので
都度都度チェックできるし、要らなくなったらその場で即開放できるので
Disposeのような仕組みもいらず、解放処理をデストラクタに一本化できるし
スマポを使えばデストラクタ自体、書く必要すらないかもしれない
そして有り難いことに、デストラクタはメンバ変数やベースクラスに対しても
芋づる式に自動で呼ばれる
これはDisposeには無い機能だ
何故無いのか?答えは、勝手にDisposeして良いのかどうか、コンパイラは判断がつかないからだ
誰か他の人が使っているかもしれないわけで、勝手にDispose出来ない
Disposeして良いかどうかはプログラマが保証しなければならないので自動化できないのだ
598デフォルトの名無しさん
2016/11/15(火) 00:02:48.22ID:PldPJ2O3 本当にC#で解放処理をまともに書こうと思うと
自身のクラスのメンバ変数にIDisposableを実装しているものがあるかどうかを調べ
もし、実装しているものがあれば、自身もIDisposableにし
Disposeメソッドを作り、その中で、先ほど調べたメンバのDisposeを呼び出さなければならない
これを手作業でやる
C#をやったことのある人なら知っている通り、マイクロソフトの示すIDisposableの実装例自体が
非常に煩雑であるわけだが、ともかく、もれがないように、手作業で頑張る
まず、IDisposableかどうか調べ忘れるだろうし、Disposeの呼び出し忘れもありうる
mallocしたらfreeしましょうと同レベルのことを強いられる
このように面倒なIDisposableであるが
IDisposableなオブジェクトをメンバに持つと、自身もIDisposableになるということは
IDisposableはどんどん伝染していくわけで、手動でDisposeしまくるコードを書き続ける羽目になる
このように、まじめに考えると、破たんした方法であることが分かる
根本の問題はDisposeが自動で呼ばれるコードをコンパイラが生成してくれないこであるが
確実にDisposeして良いかどうかを判断するためにはマークスイープを走らせる必要があるので
どうやっても自動化は困難であり、プログラマが開放してよいことを保証するという
ある種手作業なusingがせいぜいである
参照カウンタ方式であれば、ほぼノーコストで開放して良いかどうか分かるので
これらの問題は一切発生しない
解放処理はデストラクタ一本であるし、芋づる式に自動的に呼ばれるので
手動でコードを書かなければならないということもない
ランタイムもシンプルであり、バグった時も再現性が期待できる
自身のクラスのメンバ変数にIDisposableを実装しているものがあるかどうかを調べ
もし、実装しているものがあれば、自身もIDisposableにし
Disposeメソッドを作り、その中で、先ほど調べたメンバのDisposeを呼び出さなければならない
これを手作業でやる
C#をやったことのある人なら知っている通り、マイクロソフトの示すIDisposableの実装例自体が
非常に煩雑であるわけだが、ともかく、もれがないように、手作業で頑張る
まず、IDisposableかどうか調べ忘れるだろうし、Disposeの呼び出し忘れもありうる
mallocしたらfreeしましょうと同レベルのことを強いられる
このように面倒なIDisposableであるが
IDisposableなオブジェクトをメンバに持つと、自身もIDisposableになるということは
IDisposableはどんどん伝染していくわけで、手動でDisposeしまくるコードを書き続ける羽目になる
このように、まじめに考えると、破たんした方法であることが分かる
根本の問題はDisposeが自動で呼ばれるコードをコンパイラが生成してくれないこであるが
確実にDisposeして良いかどうかを判断するためにはマークスイープを走らせる必要があるので
どうやっても自動化は困難であり、プログラマが開放してよいことを保証するという
ある種手作業なusingがせいぜいである
参照カウンタ方式であれば、ほぼノーコストで開放して良いかどうか分かるので
これらの問題は一切発生しない
解放処理はデストラクタ一本であるし、芋づる式に自動的に呼ばれるので
手動でコードを書かなければならないということもない
ランタイムもシンプルであり、バグった時も再現性が期待できる
599デフォルトの名無しさん
2016/11/15(火) 00:24:03.03ID:PldPJ2O3 これがC++が未だにかたくなにマークスイープ系GCを搭載しない理由である
C++を書くプログラマはweak_ptrを適切に使えるものだという前提のもとに
マークスイープ系GCにまつわる数々の問題点を排除したのだ
マークスイープ系GCで有利なのは唯一循環参照だけであり
そこさえ気を付けることができれば
それ以外の部分に関しては参照カウンタのほうが優れている
C++は別に時代遅れなわけじゃなく、そういう選択をしたというだけ
今になって考えるとその選択は正しかったと思う
C++を書くプログラマはweak_ptrを適切に使えるものだという前提のもとに
マークスイープ系GCにまつわる数々の問題点を排除したのだ
マークスイープ系GCで有利なのは唯一循環参照だけであり
そこさえ気を付けることができれば
それ以外の部分に関しては参照カウンタのほうが優れている
C++は別に時代遅れなわけじゃなく、そういう選択をしたというだけ
今になって考えるとその選択は正しかったと思う
600デフォルトの名無しさん
2016/11/15(火) 04:04:15.16ID:9A/eUvIY メンバーにdisposeしなければならないような設計が良くない。そんなものはメソッド内のローカル変数に止めるべき。
それすらも理解できず(考え付かず)にただ一律なんにでも同じ考え方を押し込むのはただの愚行。
ありもしない、回避可能な杞憂をただ恐れるのは、勉強不足か進歩が止まっているだけ。
だから皮肉を込めて老害と呼ばれる
それすらも理解できず(考え付かず)にただ一律なんにでも同じ考え方を押し込むのはただの愚行。
ありもしない、回避可能な杞憂をただ恐れるのは、勉強不足か進歩が止まっているだけ。
だから皮肉を込めて老害と呼ばれる
601デフォルトの名無しさん
2016/11/15(火) 04:09:46.64ID:9A/eUvIY 日本語おかしかった。
メンバーにdisposeしなければならないような物を持たせるのが良くない
でした。
メンバーにdisposeしなければならないような物を持たせるのが良くない
でした。
602デフォルトの名無しさん
2016/11/15(火) 05:19:19.06ID:ulUg8AFG >>594
参照カウンタよりも固定バッファを動的に確保ですね判ります
参照カウンタよりも固定バッファを動的に確保ですね判ります
603デフォルトの名無しさん
2016/11/15(火) 05:20:35.14ID:ulUg8AFG604デフォルトの名無しさん
2016/11/15(火) 08:18:37.29ID:wcWx6QZb605デフォルトの名無しさん
2016/11/15(火) 09:05:11.25ID:P8K+NdWV606デフォルトの名無しさん
2016/11/15(火) 10:48:15.69ID:4QSE1fRA スタック変数の 0 クリアすら嫌がる C/C++ が GC 搭載とか夢見すぎ
607デフォルトの名無しさん
2016/11/15(火) 10:53:43.30ID:PldPJ2O3 struct test
{
std::shared_ptr<int> ptr;
test(){ ptr = new int; }
};
上のコードはデストラクタを書く必要があるのかないのか
スマポを使えばデストラクタを書かなくてよい場合もあり得るということ
スマポを使わないのであれば当然デストラクタでdeleteをしなければならないだろう
なので、「スマポ」と「デストラクタを書く必要性」は、関係がある
ちなみにC#のDisposeはただのメソッドであるので
このような芋づる式にメンバ変数のDisposeを呼び出してくれる機能はないし
マークスイープなので原理上不可能である
他で使用中でないことをプログラマが保証しないとにはDisposeは呼べないので
自動化できない
{
std::shared_ptr<int> ptr;
test(){ ptr = new int; }
};
上のコードはデストラクタを書く必要があるのかないのか
スマポを使えばデストラクタを書かなくてよい場合もあり得るということ
スマポを使わないのであれば当然デストラクタでdeleteをしなければならないだろう
なので、「スマポ」と「デストラクタを書く必要性」は、関係がある
ちなみにC#のDisposeはただのメソッドであるので
このような芋づる式にメンバ変数のDisposeを呼び出してくれる機能はないし
マークスイープなので原理上不可能である
他で使用中でないことをプログラマが保証しないとにはDisposeは呼べないので
自動化できない
608デフォルトの名無しさん
2016/11/15(火) 11:05:47.46ID:TNYjuRyh609デフォルトの名無しさん
2016/11/15(火) 12:45:52.53ID:LZ5unIkv >>607
それptr.reset()使うんじゃないの?
それptr.reset()使うんじゃないの?
610デフォルトの名無しさん
2016/11/15(火) 13:34:38.18ID:bbRnuBLg グローバルが嫌われたのは
疑似マルチプロセスでメモリを共有していた時代の汚物だろ
今みたいなOSのメモリ管理ならアプリ単位グローバル常套
疑似マルチプロセスでメモリを共有していた時代の汚物だろ
今みたいなOSのメモリ管理ならアプリ単位グローバル常套
611デフォルトの名無しさん
2016/11/15(火) 23:45:20.82ID:nDIaGem/ C#/C++よりRustだろ
参照カウンタのオーバーヘッドすらない
Firefoxに期待
参照カウンタのオーバーヘッドすらない
Firefoxに期待
612デフォルトの名無しさん
2016/11/16(水) 04:04:29.47ID:EhKul/vA613デフォルトの名無しさん
2016/11/16(水) 12:42:03.97ID:KQ3Yixih >>612
Write する度に WriteTypeA とかを生成/破棄するってこと?
ログとかならその方が望ましいケースもあるかもしれないけど、例えば性能上の問題でストリームは開きっぱなしにしたいとかもあるでしょ
Write する度に WriteTypeA とかを生成/破棄するってこと?
ログとかならその方が望ましいケースもあるかもしれないけど、例えば性能上の問題でストリームは開きっぱなしにしたいとかもあるでしょ
614デフォルトの名無しさん
2016/11/16(水) 14:56:37.10ID:a2T+Z3SD615デフォルトの名無しさん
2016/11/16(水) 19:17:42.21ID:KQ3Yixih616デフォルトの名無しさん
2016/11/16(水) 23:34:22.54ID:EhKul/vA >>615
ログファイルであれば日付で切り替えとかあるね。
そしたらストリーム開きっぱで日付が切り替わったら、閉じて新しいの開き直すとかあるわ。
いつもlog4とか使って主処理と切り離してたから考慮から抜けてたわ。
俺の意見はdb接続とかで一部にしか当てはまらんので、
「基本的には」とか
「リソースを管理する必要があるもの」とか前提がつくね。すまん。
ログファイルであれば日付で切り替えとかあるね。
そしたらストリーム開きっぱで日付が切り替わったら、閉じて新しいの開き直すとかあるわ。
いつもlog4とか使って主処理と切り離してたから考慮から抜けてたわ。
俺の意見はdb接続とかで一部にしか当てはまらんので、
「基本的には」とか
「リソースを管理する必要があるもの」とか前提がつくね。すまん。
617デフォルトの名無しさん
2016/11/19(土) 06:41:14.49ID:4ie0coBz ログファイルはログが確実に記録されるのが使命であって性能は二の次なのだよ
よって開きっぱなしは論外
性能で問題が出るなら吐く量を調節すればいいだろう
よって開きっぱなしは論外
性能で問題が出るなら吐く量を調節すればいいだろう
618デフォルトの名無しさん
2016/11/19(土) 08:38:51.71ID:eBLDMII7 開きっぱはなんでダメなん?
619デフォルトの名無しさん
2016/11/19(土) 08:52:00.55ID:YtkNE2sc flushすればいいな
620デフォルトの名無しさん
2016/11/19(土) 10:16:22.36ID:HaGDkE41621デフォルトの名無しさん
2016/11/19(土) 14:20:53.96ID:YtkNE2sc >>620
それは開きっぱなしが問題なんじゃなくてflushしてないことが問題なだけで見当違い
それは開きっぱなしが問題なんじゃなくてflushしてないことが問題なだけで見当違い
622デフォルトの名無しさん
2016/11/19(土) 14:29:51.71ID:HaGDkE41623デフォルトの名無しさん
2016/11/19(土) 14:34:26.96ID:WWFUnGVk とこのように、相手を互いに見当違いであると罵り合うのであった
しかし、それは正しい
両者とも正しい
しかし、それは正しい
両者とも正しい
624デフォルトの名無しさん
2016/11/19(土) 15:37:17.31ID:O7mQP4/b スコープの話してるのに flush とか頭わいてるだろ
625デフォルトの名無しさん
2016/11/19(土) 21:51:13.35ID:WZ8TOo4I null安全をアピールしてる人間はObjCerから見ると補助輪付き自転車を渡してきてこれ安全だから絶対に乗れよと言ってくる頭おかしいおじさんにしか見えない
Swift移行がこじれるだけだから黙っといて欲しい
Swift移行がこじれるだけだから黙っといて欲しい
626デフォルトの名無しさん
2016/11/21(月) 14:59:21.88ID:qSFgYSXv 浜矩子・著
『アホノミクス完全崩壊に備えよ』
『どアホノミクスへ最後の通告』
『みんなで行こうアホノミクスの向こう側』
抑制のない成長に基づく経済政策は終焉
日本国民はどう対処すればいいのか。
新しい政権は民意を反映し、
食糧、住宅、健康、教育、最後に防衛です。
国民の意志を裏切ることは、
極端な場合、自殺や殺人にまでつながります。
民衆の指導者は
職業的政治家ではない人々から見つかるのです。
世界平和の脅威は、
イスラエル、イラン、アメリカです。
イスラエルの役割は跪いて、
パレスチナに許しを請うことです。
アメリカによる他国の虐待に
反対の声を上げなければなりません。
彼らは今世紀(21世紀)を
この帝国が出来上がるアメリカの世紀と呼ぶ。
しかし、そうはならないでしょう。
彼らが世界中に‘民主的’制度を確立したい
という衝動(世界を支配する)をコントロール
するのは、マイト レーヤの任務です。
非常に間もなく
マイト レーヤをテレビで見るでしょう。
彼は「匿名」で働いております。
『アホノミクス完全崩壊に備えよ』
『どアホノミクスへ最後の通告』
『みんなで行こうアホノミクスの向こう側』
抑制のない成長に基づく経済政策は終焉
日本国民はどう対処すればいいのか。
新しい政権は民意を反映し、
食糧、住宅、健康、教育、最後に防衛です。
国民の意志を裏切ることは、
極端な場合、自殺や殺人にまでつながります。
民衆の指導者は
職業的政治家ではない人々から見つかるのです。
世界平和の脅威は、
イスラエル、イラン、アメリカです。
イスラエルの役割は跪いて、
パレスチナに許しを請うことです。
アメリカによる他国の虐待に
反対の声を上げなければなりません。
彼らは今世紀(21世紀)を
この帝国が出来上がるアメリカの世紀と呼ぶ。
しかし、そうはならないでしょう。
彼らが世界中に‘民主的’制度を確立したい
という衝動(世界を支配する)をコントロール
するのは、マイト レーヤの任務です。
非常に間もなく
マイト レーヤをテレビで見るでしょう。
彼は「匿名」で働いております。
627デフォルトの名無しさん
2016/12/08(木) 09:10:56.35ID:FEYStmIt 小規模ならGCのメリットは大きいのかもしれないが、大規模または大量にメモリを食うプログラムにはGCは向いてないのではないか。
あんまり例を知らないが、JAVAで動くマインクラフトのデバッグ画面でメモリ使用量みたら、めまぐるしく増加して一気に減ってるのみてびっくりした。
あんまり例を知らないが、JAVAで動くマインクラフトのデバッグ画面でメモリ使用量みたら、めまぐるしく増加して一気に減ってるのみてびっくりした。
628デフォルトの名無しさん
2016/12/13(火) 13:02:48.84ID:XUF2n21y GC周りに付いて書かれたネットの記事読んできたけど
オブジェクトが生成されては次々と死んでいき
生きてるオブジェクトより死んだオブジェクトが多い場合の方が速くなるっぽい
>>627
そう考えると長命のオブジェクトが大量にある方が(性能的には)問題だが
マインクラフトがそれかは知らない
オブジェクトが生成されては次々と死んでいき
生きてるオブジェクトより死んだオブジェクトが多い場合の方が速くなるっぽい
>>627
そう考えると長命のオブジェクトが大量にある方が(性能的には)問題だが
マインクラフトがそれかは知らない
629デフォルトの名無しさん
2016/12/15(木) 23:33:53.51ID:Z/98FfuD630デフォルトの名無しさん
2017/01/18(水) 11:38:56.79ID:A+XqqRn6 漏れたときの調査が大変
安心してると痛い目にあう
安心してると痛い目にあう
631デフォルトの名無しさん
2017/01/20(金) 16:23:16.03ID:4Q3o1w03 参照カウントは循環参照の問題が起こるだけじゃなくて
意外と遅いって聞くけどマジで?
・メモリをOSから直接確保・解放するのは意外と遅い
・マルチスレッドで参照カウントを使うにはアトミックな操作が必要
・カウントを自動化すると不必要な参照カウントが起こる
とかで
対してトレーシングGCの弱点は回収時に止まる時間が長いところか
その対策か、V8やOracle JavaにはGCの時間を制限する機能があるみたいだが
それってどうなんだ?
意外と遅いって聞くけどマジで?
・メモリをOSから直接確保・解放するのは意外と遅い
・マルチスレッドで参照カウントを使うにはアトミックな操作が必要
・カウントを自動化すると不必要な参照カウントが起こる
とかで
対してトレーシングGCの弱点は回収時に止まる時間が長いところか
その対策か、V8やOracle JavaにはGCの時間を制限する機能があるみたいだが
それってどうなんだ?
632デフォルトの名無しさん
2017/01/20(金) 23:17:39.79ID:2XlTkpSB まじ
633デフォルトの名無しさん
2017/01/22(日) 15:00:56.26ID:lyHWqZIh ^ナマポ
634デフォルトの名無しさん
2017/01/22(日) 18:20:35.13ID:CvVvUjG5 ストップ・ザ・ワールドの問題さえなくなればGCが最強ってこと?
635デフォルトの名無しさん
2017/01/22(日) 18:44:59.67ID:2ikRDhsq >>634
フルGCの危険があるという点で最強になりえない
フルGCの危険があるという点で最強になりえない
636デフォルトの名無しさん
2017/02/20(月) 19:16:44.90ID:NKdiRgAe バイオハザード7は28万行のC#コードでできててビルド10秒らしい。
独自VM、独自GCだとか。
独自VM、独自GCだとか。
637デフォルトの名無しさん
2017/03/20(月) 22:46:15.84ID:USOySpAW >>636
ゲームで28万ステップって長すぎね?
ゲームで28万ステップって長すぎね?
638デフォルトの名無しさん
2017/04/01(土) 12:49:43.55ID:ZgIqHRoc639デフォルトの名無しさん
2017/05/26(金) 12:05:46.50ID:uY9cFHyF >>638
FrameGCはゲームというかRTSに特化したGCだね
・ローカルに発生したオブジェクトは溜め込んでフレームの終わりにまとめて開放する
・グローバルに結びついたオブジェクトにはカウンタGCを適用する
・フレーム毎に循環参照のチェックを少しずつ行う
ざっくりこんな感じ?
FrameGCはゲームというかRTSに特化したGCだね
・ローカルに発生したオブジェクトは溜め込んでフレームの終わりにまとめて開放する
・グローバルに結びついたオブジェクトにはカウンタGCを適用する
・フレーム毎に循環参照のチェックを少しずつ行う
ざっくりこんな感じ?
640デフォルトの名無しさん
2017/05/26(金) 20:16:13.14ID:0194UVlm 内部的にC#をC++に変換してるからC#をスクリプト的に使ってるだけで実質C++だな。当然GC・メモリアロケータ周りも身内実装。
641デフォルトの名無しさん
2017/05/26(金) 22:20:13.64ID:uY9cFHyF642デフォルトの名無しさん
2017/06/03(土) 06:38:16.81ID:MyiMvGI/ そこまでやって既存のフレームワーク使えるのって疑問が。
643デフォルトの名無しさん
2017/06/03(土) 10:06:08.23ID:sCohk93m GCがconflictするんですね判ります
644デフォルトの名無しさん
2017/09/11(月) 12:41:54.43ID:YXmvV/7e 「メモリ」+「フラグメンテーション」で検索すると色々と詳しい話が出てくるね。
645デフォルトの名無しさん
2017/09/11(月) 13:14:06.52ID:YXmvV/7e ここが分かりやすかった
ttps://www.uquest.co.jp/embedded/learning/lecture17.html
ttp://www.kaede-software.com/2015/06/post_655.html
ttps://www.uquest.co.jp/embedded/learning/lecture17.html
ttp://www.kaede-software.com/2015/06/post_655.html
646デフォルトの名無しさん
2017/09/11(月) 13:44:59.20ID:I3u+9T/v メモリのフラグメンテーションなど実質的には気にする必要は全くない
なぜなら現実のコンピュータにはMMUが付いてるから
物理メモリの連続空間が枯渇することは考えなくてもよい
あり得るとしたら32bitプロセスでの論理アドレスの連続空間の枯渇であるが
64bitプロセスにすれば問題ない
もともと論理アドレス空間が枯渇するかもしれないほどメモリを使うのなら
64bitプロセスにするのが当たり前なので・・・
というわけでメモリのフラグメンテーションは気にしなくてよい
CPUのキャッシュのヒット率を上げるとか、そういうことでなければ
なぜなら現実のコンピュータにはMMUが付いてるから
物理メモリの連続空間が枯渇することは考えなくてもよい
あり得るとしたら32bitプロセスでの論理アドレスの連続空間の枯渇であるが
64bitプロセスにすれば問題ない
もともと論理アドレス空間が枯渇するかもしれないほどメモリを使うのなら
64bitプロセスにするのが当たり前なので・・・
というわけでメモリのフラグメンテーションは気にしなくてよい
CPUのキャッシュのヒット率を上げるとか、そういうことでなければ
647デフォルトの名無しさん
2017/09/11(月) 17:53:09.29ID:P5pczjP2 そうなん?
ガベコレの回収効率が悪くなって
無駄な使用領域が増えて枯渇しやすくなるんじゃね
ガベコレの回収効率が悪くなって
無駄な使用領域が増えて枯渇しやすくなるんじゃね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- フランス「G7に習近平主席を呼びたい」ドイツ「良い考えだ」 高市さん...? [237216734]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 【悲報】中国営業に熱心な日本人タレントたち、中国のイベントが続々と中止に… まだ予定中のアイドルとか歌手とかたくさんいるけど [452836546]
- 自閉症が「んなっしょい」と連呼するお🏡
- 押井守の映画「天使のたまご」が4Kリマスターされて上映されるみたいなんだけどこれ面白いの? [268718286]
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
