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
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 そうなん?
ガベコレの回収効率が悪くなって
無駄な使用領域が増えて枯渇しやすくなるんじゃね
ガベコレの回収効率が悪くなって
無駄な使用領域が増えて枯渇しやすくなるんじゃね
648デフォルトの名無しさん
2017/09/11(月) 18:13:16.59ID:SGfZs9nE >>647
GCのアロケートサイズとページングサイズの区別もついてないアホはスルーでよろしく
GCのアロケートサイズとページングサイズの区別もついてないアホはスルーでよろしく
649デフォルトの名無しさん
2017/09/11(月) 20:33:05.66ID:I3u+9T/v 程度の問題であって
世のプログラムがフラグメンテーションなど気にせずとも
普通に動いているのを見てわかる通り、問題になってない
MMUがあるから
世のプログラムがフラグメンテーションなど気にせずとも
普通に動いているのを見てわかる通り、問題になってない
MMUがあるから
650デフォルトの名無しさん
2017/09/11(月) 21:54:05.93ID:khvQxUtn >>646
そういうぬるい環境で済むところもあればそうじゃないところもある
ゲームコンソールだと物理メモリサイズに最適化するからな
STLとかdefault allocatorで気軽に使ってヒープ汚しまくってると
そのうち物理メモリ足りなくなってページアウト
そういうぬるい環境で済むところもあればそうじゃないところもある
ゲームコンソールだと物理メモリサイズに最適化するからな
STLとかdefault allocatorで気軽に使ってヒープ汚しまくってると
そのうち物理メモリ足りなくなってページアウト
651デフォルトの名無しさん
2017/09/12(火) 10:09:32.99ID:g0xsLkF6 必ず来ると思った、その反論
しかし、稀な事例を持ち出して、どうこう言っても仕方がない
しかし、稀な事例を持ち出して、どうこう言っても仕方がない
652デフォルトの名無しさん
2017/09/12(火) 12:38:17.20ID:E3lbzyXM MMU のお陰でふらぐめんてーしょんが起きない環境の方が希だと思うが
653デフォルトの名無しさん
2017/09/12(火) 13:22:19.16ID:crCgFvVY フラグメンテーションはアドレス空間や実メモリ量が限定される環境をどううまく使うかの話だから
MMUがあって64bit空間なら平気と言われてもな
MMUがあって64bit空間なら平気と言われてもな
654デフォルトの名無しさん
2017/09/13(水) 03:53:58.25ID:TAF2DPKT そそ、複雑なプログラムって書こうと思えばいくらでも複雑化するからな。
で、簡潔で高度と思われる機能を追加していくほど難易度は指数関数的に増大するし。
で、簡潔で高度と思われる機能を追加していくほど難易度は指数関数的に増大するし。
655デフォルトの名無しさん
2017/09/13(水) 05:10:44.22ID:t818hmCa でも実際スマホアプリ作ってんのにフラグメンテーションを防ぐ為に最初に使用する分全部確保しておいて、その中で割り当てするんだーとかいって、オレオレアロケーター作ろうとする頭の悪いやつがいて困る。
逆にお前の作ったそのアロケーターの中でフラグメンテーションして枯渇するわと。
逆にお前の作ったそのアロケーターの中でフラグメンテーションして枯渇するわと。
656デフォルトの名無しさん
2017/09/13(水) 07:42:12.50ID:7O+lQKpp 組み込みなんかでよくあるそういうのは、どっちかというと最初に確保したメモリ以上を
使用しないことを保証するためにやるもんだろう。
使用しないことを保証するためにやるもんだろう。
657デフォルトの名無しさん
2017/09/13(水) 08:52:01.48ID:Vaq5SeW/ アロケータ置き換えるだけでは普通解決しないでしょ
>>655 こそが置き換えて何するのか理解できてない気がする
>>655 こそが置き換えて何するのか理解できてない気がする
658デフォルトの名無しさん
2017/09/13(水) 22:09:52.04ID:PcFMQESF むしろ一定時間を保証する(なのでサイズは固定長とかが多い)もんだろ
659デフォルトの名無しさん
2017/09/17(日) 13:06:26.21ID:S40DCpdn いくら64bitあっても設計が雑ならメモリ枯渇するでしょ
ページング方式でメモリ消費されてんだし
ページング方式でメモリ消費されてんだし
660デフォルトの名無しさん
2017/09/17(日) 13:32:06.14ID:2kxiy1Rb MMUのアドレス変換コストもタダじゃない。
TLBキャッシュ外れたら遅くなる。
TLBキャッシュ外れたら遅くなる。
661デフォルトの名無しさん
2017/09/17(日) 13:32:07.34ID:S40DCpdn 1回のメモリ取得で4kづつ消費されるわけか
662デフォルトの名無しさん
2017/09/17(日) 13:49:19.58ID:S40DCpdn ツリー状のメモリ管理するとあっという間にメモリ無くなるな
class CTree{
std::vector<CTree>;
};
とか
class CTree{
std::vector<CTree>;
};
とか
663デフォルトの名無しさん
2017/09/17(日) 14:00:55.72ID:S40DCpdn こうするとさらにメモリが消えていくな
class CTree{
std::map<std::string,CTree>;
};
class CTree{
std::map<std::string,CTree>;
};
664デフォルトの名無しさん
2017/09/17(日) 14:12:30.87ID:S40DCpdn 間違えた。
class CTree{
std::vector<CTree> m_Tree;
};
class CTree{
std::map<std::string,CTree>m_Tree;
};
で、ツリーのノード一つ毎に上は4kづつ下は8kづつメモリを消費するわけで・・・
class CTree{
std::vector<CTree> m_Tree;
};
class CTree{
std::map<std::string,CTree>m_Tree;
};
で、ツリーのノード一つ毎に上は4kづつ下は8kづつメモリを消費するわけで・・・
665デフォルトの名無しさん
2017/09/17(日) 15:23:52.56ID:iyMogwhx 一回のメモリ取得で4KBってのが嘘だから意味が無い話だね
MMUついてたって、そんなアホな実装は無い
4KBだかの1ページ分の中での細かなメモリ断片化はおおむね無視できる、ということ
メモリ断片化で困るのは大きなサイズのメモリを確保しようと思ったとき
連続したアドレスが確保できなくてコケる、ということだからね
これに対してMMUは有効ということ
メモリが断片化で多少無駄遣いされる分にはスワップしてでも動くから
そんでこれは程度問題
大概の場合は問題にならない
MMUついてたって、そんなアホな実装は無い
4KBだかの1ページ分の中での細かなメモリ断片化はおおむね無視できる、ということ
メモリ断片化で困るのは大きなサイズのメモリを確保しようと思ったとき
連続したアドレスが確保できなくてコケる、ということだからね
これに対してMMUは有効ということ
メモリが断片化で多少無駄遣いされる分にはスワップしてでも動くから
そんでこれは程度問題
大概の場合は問題にならない
666デフォルトの名無しさん
2017/09/17(日) 15:38:01.00ID:S40DCpdn https://ja.wikipedia.org/wiki/動的メモリ確保
>また、粒度の細かいページングは、ページングテーブル
>(物理アドレスと論理アドレスの対応表)が大きくなるため、
>4KB程度の大きなブロック単位でしか割り当てることができない。
ウィキペディア見るとそのアフォな実装がまかり通ってると読めるんだが・・・
>また、粒度の細かいページングは、ページングテーブル
>(物理アドレスと論理アドレスの対応表)が大きくなるため、
>4KB程度の大きなブロック単位でしか割り当てることができない。
ウィキペディア見るとそのアフォな実装がまかり通ってると読めるんだが・・・
667デフォルトの名無しさん
2017/09/17(日) 15:48:55.35ID:iyMogwhx アホだなぁ
OSレベルのメモリ確保と言語レベルのnew、mallocは別
OSレベルのメモリ確保と言語レベルのnew、mallocは別
668デフォルトの名無しさん
2017/09/17(日) 16:00:06.71ID:S40DCpdn こっちも参考になる
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E7%AE%A1%E7%90%86%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88
CPUによってMMUの実装が異なる点は面倒だな
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E7%AE%A1%E7%90%86%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88
CPUによってMMUの実装が異なる点は面倒だな
669デフォルトの名無しさん
2017/09/17(日) 16:06:24.06ID:S40DCpdn670デフォルトの名無しさん
2017/09/17(日) 16:13:26.66ID:iyMogwhx mallocやnewは
大きなサイズを確保するときと
小さなサイズを確保するときで
アルゴリズムが切り替わる
大きなサイズを確保するときと
小さなサイズを確保するときで
アルゴリズムが切り替わる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
