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
2015/11/19(木) 00:01:54.17ID:6rd98MPK
なるべくスコープを狭くして長時間存在するオブジェクトを無くす
以上
以上
2015/11/19(木) 00:14:59.30ID:d0YkbYhs
仮にmalloc/free型を長時間動かしてたらフラグメントが酷いことになるぞ
そういう問題もコピーGCなら一気に解消できるしGCの方が耐久力があるよね
そういう問題もコピーGCなら一気に解消できるしGCの方が耐久力があるよね
4デフォルトの名無しさん
2015/11/19(木) 01:28:02.40ID:6x5+bHoL GCの無い時代のプログラムでフラグメントが問題になった例をあげてみろよゴミッカスw
2015/11/19(木) 02:10:36.00ID:C+wDd3AI
6デフォルトの名無しさん
2015/11/19(木) 08:58:13.78ID:JIJtk7D/ ブラッド・コックスとトム・ラブがObjective-Cを作り「この言語はCのメモリ安全性とSmalltalkの高速性を合わせたものだ」と宣言する。
現代の歴史家は2人が失読症ではないかと疑っている。
https://twitter.com/okdshin/status/666903312151613440
現代の歴史家は2人が失読症ではないかと疑っている。
https://twitter.com/okdshin/status/666903312151613440
2015/11/19(木) 23:17:01.16ID:SYMznuBH
519 :名無し~3.EXE:2015/11/19(木) 21:49:08.84 ID:CEKgHuEl
他のアプリを使用しながらSleipnirを使う
メモリー不足でのメッセージは良心的
https://i.gyazo.com/57e93e426e7a2b5fe7ba4dcf19a432c8.png
問題点として、場合によってはメモリー不足で
メッセージされずに展開されなくなる
Sleipnirが不安定で信頼感を得られない要因
520 :名無し~3.EXE:2015/11/19(木) 21:51:47.06 ID:CEKgHuEl
6で書き込み欄が展開されなくなった・・・再起動してカキコした
521 :名無し~3.EXE:2015/11/19(木) 21:52:39.96 ID:CEKgHuEl
◆重要◆Sleipnirが不安定で信頼感を得られない要因
他のアプリを使用しながらSleipnirを使う
メモリー不足でのメッセージは良心的
https://i.gyazo.com/57e93e426e7a2b5fe7ba4dcf19a432c8.png
問題点として、場合によってはメモリー不足で
メッセージされずに展開されなくなる
Sleipnirが不安定で信頼感を得られない要因
520 :名無し~3.EXE:2015/11/19(木) 21:51:47.06 ID:CEKgHuEl
6で書き込み欄が展開されなくなった・・・再起動してカキコした
521 :名無し~3.EXE:2015/11/19(木) 21:52:39.96 ID:CEKgHuEl
◆重要◆Sleipnirが不安定で信頼感を得られない要因
2015/11/19(木) 23:18:18.19ID:SYMznuBH
525 :名無し~3.EXE:2015/11/19(木) 22:13:05.49 ID:CEKgHuEl
展開されない時
リロードで展開される場合もあるが
リロードで展開ない場合もある
展開されない時
リロードで展開される場合もあるが
リロードで展開ない場合もある
2015/11/20(金) 09:27:53.75ID:em+ldceb
メモリ管理は自分でやった方が漏れが出るでしょ
規模がでかくなればなるほどリスクが大きくなる
規模がでかくなればなるほどリスクが大きくなる
10デフォルトの名無しさん
2015/11/20(金) 15:32:07.18ID:hg0nWx/i C#の基本は自動だけど部分的に手動にできるハイブリッドがいいと思うよ
確保量の大きい画像なんかを扱っているとどうしても手動で解放したいタイミングもあるし
確保量の大きい画像なんかを扱っているとどうしても手動で解放したいタイミングもあるし
11uy ◆Qawu9.2l1E
2015/11/20(金) 20:28:57.10ID:QlSu2hgW まともな言語ならオプションくらいついてる
2015/11/20(金) 22:40:56.83ID:h5Le2W6O
>>10
それが理想的だけど、C#ってそんなことできたっけ?
それが理想的だけど、C#ってそんなことできたっけ?
2015/11/21(土) 09:07:54.65ID:+qGvO8oq
2015/11/21(土) 10:29:39.51ID:7nxNhgSu
調べてみたけどよくわからんな。
もしかしてアンマネージなメモリを確保してデータ領域に使う話?
もしかしてアンマネージなメモリを確保してデータ領域に使う話?
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 メモリの解放すら管理できない奴が、複雑な仕様を管理できるとは到底思えない・・・。
メモリの解放なんてなんの苦にもならんが・・・。
メモリの解放なんてなんの苦にもならんが・・・。
116デフォルトの名無しさん
2015/11/30(月) 20:14:21.83ID:Ee9Jt/HC やれやれw
MSやLinuxやFreeBSDまでメモリリークやらかす理由が分らないのか。
MSやLinuxやFreeBSDまでメモリリークやらかす理由が分らないのか。
117デフォルトの名無しさん
2015/11/30(月) 20:30:16.55ID:UQyKbzCH118デフォルトの名無しさん
2015/11/30(月) 20:33:04.33ID:V9s4KAVu 人生の管理ができない奴が、メモリを管理できるとは到底思えない
119デフォルトの名無しさん
2015/11/30(月) 20:49:26.08ID:UQyKbzCH そもそもLinuxカーネルもFreeBSDカーネルもC言語だろ
馬鹿丸出しだなw
馬鹿丸出しだなw
120デフォルトの名無しさん
2015/11/30(月) 21:16:22.39ID:zT+q2mn+ >>115
それな
プログラミングにおいてメモリ周囲はまだ初歩だよな
そしてマルチスレッドはそれよりは大変だがこれも慣れると
結局大事なところをガッチリ排他処理するだけのことだしな
プログラミングって最後はインタフェース設計だけだから
使いやすくてコンパクトなインタフェースを求めていくだけ
これがプログラミング道の後半の道のり
それな
プログラミングにおいてメモリ周囲はまだ初歩だよな
そしてマルチスレッドはそれよりは大変だがこれも慣れると
結局大事なところをガッチリ排他処理するだけのことだしな
プログラミングって最後はインタフェース設計だけだから
使いやすくてコンパクトなインタフェースを求めていくだけ
これがプログラミング道の後半の道のり
121デフォルトの名無しさん
2015/11/30(月) 21:18:50.76ID:Ee9Jt/HC >>120
で例外系の実装がないから破綻するんだよ。実務経験ないとすぐ短絡的になるのが分る。
で例外系の実装がないから破綻するんだよ。実務経験ないとすぐ短絡的になるのが分る。
122デフォルトの名無しさん
2015/11/30(月) 21:25:49.32ID:zT+q2mn+ 意味が不明すぐるw
123デフォルトの名無しさん
2015/11/30(月) 21:28:33.92ID:Ee9Jt/HC うむ。まだおまえには早いかもしれない。
124デフォルトの名無しさん
2015/11/30(月) 21:47:43.54ID:UQyKbzCH125デフォルトの名無しさん
2015/11/30(月) 22:07:34.86ID:zT+q2mn+126デフォルトの名無しさん
2015/12/01(火) 00:23:09.00ID:s1rcgCDh Guilty Crown?
たしかに失敗作だったなあ…
たしかに失敗作だったなあ…
127デフォルトの名無しさん
2015/12/01(火) 01:24:29.91ID:mVPa8mQr GCが云々というより抽象的なプログラミングしたい時は基本的なメモリ管理を言語に任せたいという欲求
128デフォルトの名無しさん
2015/12/01(火) 01:27:09.96ID:mVPa8mQr129デフォルトの名無しさん
2015/12/01(火) 01:30:32.01ID:s1rcgCDh GCは関数型プログラミングでのみ正当化される
命令型プログラミングでは全く正当化されない
命令型プログラミング(=チューリングマシンに基づく計算モデル)は読み書きの「順序」こそがネ申なので
命令コードの「順序」を横断して存続するブツは善と悪の最終戦争で滅ぼされるであろう
つまり確保し、使ったら後開放する、これを明示的に書き下す姿勢こそが正しい
命令型プログラミングでは全く正当化されない
命令型プログラミング(=チューリングマシンに基づく計算モデル)は読み書きの「順序」こそがネ申なので
命令コードの「順序」を横断して存続するブツは善と悪の最終戦争で滅ぼされるであろう
つまり確保し、使ったら後開放する、これを明示的に書き下す姿勢こそが正しい
130デフォルトの名無しさん
2015/12/01(火) 01:31:50.27ID:s1rcgCDh >GCは関数型プログラミングでのみ正当化される
ちな、これは処理系の裏方としての存在が許される、の意味
ちな、これは処理系の裏方としての存在が許される、の意味
131デフォルトの名無しさん
2015/12/01(火) 01:36:31.76ID:mVPa8mQr 関数型プログラミング好きだけど
代数型データ型と型クラスでモナドとかアプリカティブとかtraverse、free monadとかやってる時に
メモリ管理だの言われたら余裕で死ねるな
本物のhaskellプログラマはhaskellで低レイヤを書くらしいけど
代数型データ型と型クラスでモナドとかアプリカティブとかtraverse、free monadとかやってる時に
メモリ管理だの言われたら余裕で死ねるな
本物のhaskellプログラマはhaskellで低レイヤを書くらしいけど
2015/12/01(火) 04:32:07.54ID:79aHC4wo
口 先 人 間 展 覧 会 。(アハ
133デフォルトの名無しさん
2015/12/01(火) 12:55:11.72ID:S8usJREu134デフォルトの名無しさん
2015/12/03(木) 12:20:09.85ID:AuS7g0FI ここでメモリ確保
ここでメモリ解放
たったこれだけが書けない管理できないとかw
ここでメモリ解放
たったこれだけが書けない管理できないとかw
135デフォルトの名無しさん
2015/12/03(木) 12:23:19.04ID:n26CULk9 知らないでやるって幸せなことなんですね
136デフォルトの名無しさん
2015/12/03(木) 13:19:32.39ID:N5r0JkUz >>134
下には下がいるんだよ
下には下がいるんだよ
137デフォルトの名無しさん
2015/12/03(木) 13:29:54.15ID:JbiOZ/E3 メモリリークは開放忘れでなると思ってる低レベルがいるのか。
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のファイナライザに全てを任せてメモリと同様にリソースを完全に透過的に扱うべきだ
239デフォルトの名無しさん
2015/12/07(月) 23:25:36.31ID:QznWTKRS240デフォルトの名無しさん
2015/12/08(火) 00:48:22.00ID:pyjW8EMu full GCが頻繁に生じちゃうのは明らかに設計ミスやな
immutableな短命objectを使いまくるのだ。。
つかimmutableなオブジェクト使いまくるとGCないときつくね?
immutableな短命objectを使いまくるのだ。。
つかimmutableなオブジェクト使いまくるとGCないときつくね?
241デフォルトの名無しさん
2015/12/08(火) 02:05:45.39ID:H3TgUaFB RAIIで事足りる
immutableかどうかとGCは無関係
immutableかどうかとGCは無関係
242デフォルトの名無しさん
2015/12/08(火) 02:21:53.95ID:RVFMry3L むしろ短命なオブジェクトなんてスタックで十分だし
管理するならshared_ptrのが優れてる
管理するならshared_ptrのが優れてる
243デフォルトの名無しさん
2015/12/08(火) 03:41:28.67ID:pU1qoPPC ライブラリ、アプリ、ユーザの三者で考えないと
一部リソースはユーザがを閉じることができる。
そのときアプリの参照を消す仕組みがどのライブラリにもない
一部リソースはユーザがを閉じることができる。
そのときアプリの参照を消す仕組みがどのライブラリにもない
244デフォルトの名無しさん
2015/12/08(火) 08:07:46.77ID:rWJ9nJMw245デフォルトの名無しさん
2015/12/08(火) 12:16:07.11ID:VV6tYNBF Manager.Execute((res) => ...);
これが終着点
短命なリソースは全てこの形式で事足りし長命なリソースはファイナライザにでも任せればよい
ユーザーが管理しちゃ絶対にダメ
これが終着点
短命なリソースは全てこの形式で事足りし長命なリソースはファイナライザにでも任せればよい
ユーザーが管理しちゃ絶対にダメ
246デフォルトの名無しさん
2015/12/08(火) 15:11:36.25ID:DYNM3xm/ このスレでGCいらんて言ってる人たちは環境に恵まれてるんだなぁって思う
247デフォルトの名無しさん
2015/12/08(火) 15:20:06.88ID:Bkt0caBE GC
タモリが昔宣伝してやつ?
タモリが昔宣伝してやつ?
248デフォルトの名無しさん
2015/12/08(火) 15:28:54.90ID:NMHe7TFl むしろGCなんて環境良くないと使えないだろ
249デフォルトの名無しさん
2015/12/08(火) 16:16:30.38ID:zjJIjn6V 参照がなくなったタイミングで必ず開放してくれて
かつ
循環参照でも問題ない
パーフェクトなGCが有れば最高なわけだが
実際にはそんなGCは無い
となれば、通常であれば言語側は性質の異なる複数のGCを用意しておいて
使う側はシチュエーションに合わせて選べるようにしておくのが自然な発想
しかしそういう言語は殆ど無い、これが問題
といってもマークスイープ系GCが前提のC#やJavaのような言語に
RAIIの発想を持ち込もうとしても
C++のデストラクタのように自身のメンバのデストラクタを自動で芋づる式に呼び出す仕組みが
元々無いので、手動で芋づる式に解放関数を呼び出すコードを書かなければならなく
うまく行っていない
かつ
循環参照でも問題ない
パーフェクトなGCが有れば最高なわけだが
実際にはそんなGCは無い
となれば、通常であれば言語側は性質の異なる複数のGCを用意しておいて
使う側はシチュエーションに合わせて選べるようにしておくのが自然な発想
しかしそういう言語は殆ど無い、これが問題
といってもマークスイープ系GCが前提のC#やJavaのような言語に
RAIIの発想を持ち込もうとしても
C++のデストラクタのように自身のメンバのデストラクタを自動で芋づる式に呼び出す仕組みが
元々無いので、手動で芋づる式に解放関数を呼び出すコードを書かなければならなく
うまく行っていない
250デフォルトの名無しさん
2015/12/08(火) 16:25:08.60ID:RVFMry3L251デフォルトの名無しさん
2015/12/08(火) 16:37:24.80ID:zjJIjn6V >>250
自分のクラスがファイルなんかのcloseを持つリソースをメンバに持っていたとする
そうすると、それらのメンバのリソースを明示的にcloseできるようにするために
自身もcloseを実装することになるだろう
それで、自身のcloseが呼ばれた時、勝手にメンバのcloseが呼ばれるか?
結局手動でメンバのcloseを呼び出しまわるコードを書かなければならない
C++のデストラクタならメンバのデストラクタが芋づる式に勝手に呼び出されるから
気にしなくて良い
自分のクラスがファイルなんかのcloseを持つリソースをメンバに持っていたとする
そうすると、それらのメンバのリソースを明示的にcloseできるようにするために
自身もcloseを実装することになるだろう
それで、自身のcloseが呼ばれた時、勝手にメンバのcloseが呼ばれるか?
結局手動でメンバのcloseを呼び出しまわるコードを書かなければならない
C++のデストラクタならメンバのデストラクタが芋づる式に勝手に呼び出されるから
気にしなくて良い
252デフォルトの名無しさん
2015/12/08(火) 17:08:50.17ID:NMHe7TFl 強参照、ソフト参照、弱参照、ファントム参照
この字面だけで糞言語って察せられるから凄い
この字面だけで糞言語って察せられるから凄い
253デフォルトの名無しさん
2015/12/08(火) 19:22:21.31ID:RKxPG6yJ Rustはどう?
明文化されたmoveセマンティクスと、オブジェクトの寿命と参照のチェッカを型システムに組み込んでるおかげで、
リソース管理の実行時コストをゼロにしつつ、メモリリークが発生しないプログラムが書ける。
shared_ptrに相当するRcもあるから、所有者を複数にしたい場合のコストもそれなりに抑えられる。
明文化されたmoveセマンティクスと、オブジェクトの寿命と参照のチェッカを型システムに組み込んでるおかげで、
リソース管理の実行時コストをゼロにしつつ、メモリリークが発生しないプログラムが書ける。
shared_ptrに相当するRcもあるから、所有者を複数にしたい場合のコストもそれなりに抑えられる。
254デフォルトの名無しさん
2015/12/08(火) 19:35:14.32ID:Hrv9Cion >>253
すげえ難しいらしいじゃん
すげえ難しいらしいじゃん
255デフォルトの名無しさん
2015/12/08(火) 19:52:40.51ID:NMHe7TFl rustの清貧さは好みだけどまだ触った事ないな
同期処理を省略するためかshared_ptr相当がタスク間跨げないらしいけど
そこら辺の使い勝手ってどうなんだろう
同期処理を省略するためかshared_ptr相当がタスク間跨げないらしいけど
そこら辺の使い勝手ってどうなんだろう
256デフォルトの名無しさん
2015/12/08(火) 21:00:06.21ID:RKxPG6yJ >>254 難しいのは難しいが、低レベルの世界に相応な難易度であって、理不尽さはあまり無いと思う。
自分が遭遇した理不尽というか不便は、トレイト(型クラスみたいなの)を戻り値にした、ジェネリックな関数の型注釈の煩雑さで、
そのworkaroundが、その関数の返り値専用の型を定義する、ってのがカルチャーショックだった。
https://doc.rust-lang.org/std/iter/trait.Iterator.html
↑はIteratorトレイト(Listインターフェイスみたいなもの)のドキュメントだけど、mapとかfoldとかよくある高階関数の戻り値が、それ専用の型(MapとかFold)になってる。
だから、よくある関数型言語のイメージで、何か高階関数を利用したアダプタ関数を試しに定義してみよう!ってやると、
型注釈のエラー、ライフタイムのエラー等が一辺に出てきてわけが分からなくなる。
その関数の戻り値専用の型、なんて贅沢に見えるけど、返り値のサイズを見る限り、余計なデータで膨れているわけでもなかった。
Cでstruct wrap_int { int c; };とやったときにsizeof(wrap_int)がsizeof(int)と等しいけど、それと同じことをやっていた。
型情報なんてコンパイル時に全部消えちゃうから、実行コストも無いんじゃないかと今では思う。
メモリ/リソースの所有権を意識してコードを書くこと、が身について面白いよ。
ヒープを贅沢に使ってコピーしまくりなコードを書くと汚いし遅いしなんで、ちょっとダイエットする気分も出てくる。
自分が遭遇した理不尽というか不便は、トレイト(型クラスみたいなの)を戻り値にした、ジェネリックな関数の型注釈の煩雑さで、
そのworkaroundが、その関数の返り値専用の型を定義する、ってのがカルチャーショックだった。
https://doc.rust-lang.org/std/iter/trait.Iterator.html
↑はIteratorトレイト(Listインターフェイスみたいなもの)のドキュメントだけど、mapとかfoldとかよくある高階関数の戻り値が、それ専用の型(MapとかFold)になってる。
だから、よくある関数型言語のイメージで、何か高階関数を利用したアダプタ関数を試しに定義してみよう!ってやると、
型注釈のエラー、ライフタイムのエラー等が一辺に出てきてわけが分からなくなる。
その関数の戻り値専用の型、なんて贅沢に見えるけど、返り値のサイズを見る限り、余計なデータで膨れているわけでもなかった。
Cでstruct wrap_int { int c; };とやったときにsizeof(wrap_int)がsizeof(int)と等しいけど、それと同じことをやっていた。
型情報なんてコンパイル時に全部消えちゃうから、実行コストも無いんじゃないかと今では思う。
メモリ/リソースの所有権を意識してコードを書くこと、が身について面白いよ。
ヒープを贅沢に使ってコピーしまくりなコードを書くと汚いし遅いしなんで、ちょっとダイエットする気分も出てくる。
257デフォルトの名無しさん
2015/12/08(火) 22:39:35.60ID:RVFMry3L258デフォルトの名無しさん
2015/12/08(火) 22:59:22.32ID:RKxPG6yJ >>255 shared_ptrと恒等なものは無いけど、ポインタ的に使える型がBox, Rc, Cell(あるいはRefCell)とあって、
Boxはヒープ領域であること、Rcは複数の所有者がいる(つまり所有者全員が死ぬまでは生きている)こと、Cellは複数の書き込みが作れること、
とか機能とコストが別れているから、これらを組み合わせて使う。
で、Thread Safetyを実現させる機構は上記には無いので、Atomicityを導入させるRcの類似形であるArcと、
書き込みもしたいならMutexっていう型も合わせて使う。
すると、例えば整数のベクトルをスレッド間で共有したい、とかになるとArc<Mutex<Vec<i32>>>という目が滑るような型表記をすることになる。
あんま詳しくないので、ケース毎にもっと簡単なやり方があるとは思うんだけどね。
Boxはヒープ領域であること、Rcは複数の所有者がいる(つまり所有者全員が死ぬまでは生きている)こと、Cellは複数の書き込みが作れること、
とか機能とコストが別れているから、これらを組み合わせて使う。
で、Thread Safetyを実現させる機構は上記には無いので、Atomicityを導入させるRcの類似形であるArcと、
書き込みもしたいならMutexっていう型も合わせて使う。
すると、例えば整数のベクトルをスレッド間で共有したい、とかになるとArc<Mutex<Vec<i32>>>という目が滑るような型表記をすることになる。
あんま詳しくないので、ケース毎にもっと簡単なやり方があるとは思うんだけどね。
259デフォルトの名無しさん
2015/12/08(火) 23:55:28.64ID:NMHe7TFl >>258
ああ、Arcってのが別にいるのね。納得
個人的にもう一点気になる所があるから聞いてしまう
BoxやDropを使ってるとコピー禁止になるらしいけど
これ面倒な場合ない?
最初はコピー可能な型としてガンガンコピーしてたけど
途中から終了処理を書きたくなったらコピーしてる箇所
全部直すって事?
ちなみにググってたらRWArcっての見つけたんだけど
これ読み書き可能なArcなんじゃね
ああ、Arcってのが別にいるのね。納得
個人的にもう一点気になる所があるから聞いてしまう
BoxやDropを使ってるとコピー禁止になるらしいけど
これ面倒な場合ない?
最初はコピー可能な型としてガンガンコピーしてたけど
途中から終了処理を書きたくなったらコピーしてる箇所
全部直すって事?
ちなみにググってたらRWArcっての見つけたんだけど
これ読み書き可能なArcなんじゃね
260デフォルトの名無しさん
2015/12/09(水) 00:46:02.26ID:WVnNYSfg >>249
javaは世代別管理でGCの種類は色々選べるはずでは
javaは世代別管理でGCの種類は色々選べるはずでは
261デフォルトの名無しさん
2015/12/09(水) 01:14:15.85ID:wAGGTtTq262デフォルトの名無しさん
2015/12/09(水) 01:50:08.36ID:x/ryIvcR >>259 コピーしまくっているような変数の型をTからBox<T>に変えた場合、確かに面倒なことになる。
けど、基本的に単純な代入(let x = y)はコピーじゃなくてmoveになるし、
Box<T>の値をコピーしてBox<T>の値を生成するっていうのは、同じヒープ領域を指すポインタを作るんじゃなく、
新しいヒープ領域を確保して中身をコピーし、そのポインタを返すという意味なんで、
変数の型を後でTをBox<T>に変える、という場面はあまり無い(少なくとも自分は学んでいる最中にそういうことをしたくなったことがない)
値をコピーする場面では、元の変数の型がBox<T>であってもTであっても、参照型&Tを受け取ってTを生成、ということをするのが定石。
&Tはほぼ無制限に安全に作ることができるし、安全じゃない可能性があったらコンパイルが通らない。
で、コピーした型Tの値は呼び出し元がBoxに包んでヒープ領域に置いたりするのが定石
Dropも別にコピーを禁止することは無いよ。後からつけたらエラーまみれ、ということにはならない。
あと、自作じゃない型に自作じゃないトレイト(インターフェイスみたいなもの)をつけることができないので、
例えば標準ライブラリのFileやTcpStreamはCopyできるようには決してできない。メモリ以外の資源管理も安全だよ。
けど、基本的に単純な代入(let x = y)はコピーじゃなくてmoveになるし、
Box<T>の値をコピーしてBox<T>の値を生成するっていうのは、同じヒープ領域を指すポインタを作るんじゃなく、
新しいヒープ領域を確保して中身をコピーし、そのポインタを返すという意味なんで、
変数の型を後でTをBox<T>に変える、という場面はあまり無い(少なくとも自分は学んでいる最中にそういうことをしたくなったことがない)
値をコピーする場面では、元の変数の型がBox<T>であってもTであっても、参照型&Tを受け取ってTを生成、ということをするのが定石。
&Tはほぼ無制限に安全に作ることができるし、安全じゃない可能性があったらコンパイルが通らない。
で、コピーした型Tの値は呼び出し元がBoxに包んでヒープ領域に置いたりするのが定石
Dropも別にコピーを禁止することは無いよ。後からつけたらエラーまみれ、ということにはならない。
あと、自作じゃない型に自作じゃないトレイト(インターフェイスみたいなもの)をつけることができないので、
例えば標準ライブラリのFileやTcpStreamはCopyできるようには決してできない。メモリ以外の資源管理も安全だよ。
263デフォルトの名無しさん
2015/12/12(土) 10:36:13.53ID:mXWFWn5f freeし忘れるとか、そんな超ウルトラ素人ミスを大前提に議論するのは間違いだよなw
freeしきれないとかwwww
freeしきれないとかwwww
264デフォルトの名無しさん
2015/12/12(土) 11:52:29.69ID:v/VbuB+R265デフォルトの名無しさん
2015/12/12(土) 12:05:07.06ID:yfUf7LLZ shared_ptrって参照カウント式のGCじゃないの?
266デフォルトの名無しさん
2015/12/12(土) 12:44:09.71ID:7G0ybzbE 循環を綺麗に扱えるなら参照カウントの方が良いと思うけど
VB6は循環参照の扱いどうやってるんだろう
VB6は循環参照の扱いどうやってるんだろう
267デフォルトの名無しさん
2015/12/12(土) 14:25:51.97ID:npRd3MLZ >>265
RAIIじゃろ
RAIIじゃろ
268デフォルトの名無しさん
2015/12/12(土) 15:20:38.55ID:tVgJgcBS269名無しさん@そうだ選挙に行こう
2015/12/14(月) 08:16:09.53ID:hn3965Zz2015/12/14(月) 08:38:44.84ID:sXTPVO5Q
片付ける奴が馬鹿なのだ。素人ほど簡単だと言いたがり、上級者ほど簡単ではないとはっきり言うものだ。
どの分野でもな。
どの分野でもな。
2015/12/14(月) 09:09:02.89ID:lNUL9lX8
freeとか言ってる奴はC++使えよ。いつまでC使ってんだ。
2015/12/14(月) 09:20:53.11ID:MauTQhQ/
2015/12/14(月) 09:35:23.70ID:sXTPVO5Q
2015/12/14(月) 09:37:05.77ID:eBJzgHzn
それ中級者
あと、東大生は教えるの上手いのもいるから想像で話すな馬鹿
あと、東大生は教えるの上手いのもいるから想像で話すな馬鹿
2015/12/14(月) 09:41:37.74ID:sXTPVO5Q
このようにおまえのようなコンテキストすらまともに読めないPGは五万といる。
スレッドがデッドロックしてメモリを開放できないなんてよくあることだ。
スレッドがデッドロックしてメモリを開放できないなんてよくあることだ。
276名無しさん@そうだ選挙に行こう
2015/12/14(月) 10:59:16.82ID:hn3965Zz >>275
。。。。。完全な設計ミスじゃん
。。。。。完全な設計ミスじゃん
2015/12/14(月) 11:15:19.23ID:eBJzgHzn
2015/12/14(月) 11:40:27.14ID:ETDpPCfc
スレッドがデッドロックしたらメモリリークどころじゃないじゃないかwww
2015/12/14(月) 14:48:51.74ID:MOnxQz3f
スレッドがデッドロックしちゃってメモリ解放できない(泣)
っていうPGが五万といるのかよw
っていうPGが五万といるのかよw
280名無しさん@そうだ選挙に行こう
2015/12/14(月) 15:51:19.55ID:hn3965Zz まぁfreeやdeleteやnullやらすらできないPGに、「僕はそんなこと管理しきれる脳みそ持ってない!」って言われたらソレは真実なんだろうけど・・・。
そんな脳みそPGに「もっと複雑な業務使用」を理解できるとは思えないんだ。
そんなPGにプログラミングの場を与えるのが間違い。
そんな脳みそPGに「もっと複雑な業務使用」を理解できるとは思えないんだ。
そんなPGにプログラミングの場を与えるのが間違い。
2015/12/14(月) 15:58:21.86ID:2JSVZtRY
そもそも実務でスレッド使うPGなんてゴマンもいない
2015/12/14(月) 17:06:58.52ID:eBJzgHzn
Javaのプロジェクトだとほぼ使ってるけどな隠蔽してるだけで
そのせいで共有リソース壊したり、逆に個人情報の領域が共有されたりして、とんでもないインシデントが発生する
そんな奴等にメモリ管理なんて任せられんし、共有リソースも触らせたくないから
更に隠蔽したフレームワークもどきが出来上がる
そのせいで共有リソース壊したり、逆に個人情報の領域が共有されたりして、とんでもないインシデントが発生する
そんな奴等にメモリ管理なんて任せられんし、共有リソースも触らせたくないから
更に隠蔽したフレームワークもどきが出来上がる
283名無しさん@そうだ選挙に行こう
2015/12/14(月) 17:59:33.07ID:hn3965Zz2015/12/14(月) 18:15:27.90ID:Z4FycFda
javaってc++のconst参照に対応するものが無いのに、素人みたいなプログラマを大量にかき集めているのが怖すぎる。
2015/12/14(月) 18:28:13.63ID:eBJzgHzn
>>283
理解してないのに無理してレスしなくていいから
理解してないのに無理してレスしなくていいから
2015/12/14(月) 18:42:08.38ID:CJqGCki1
C#はマルチスレッド使いまくりだけど事故の話はあまり聞かないな
マイクロソフトが優秀なのか低品質プログラマがいないのか
マイクロソフトが優秀なのか低品質プログラマがいないのか
2015/12/14(月) 19:01:59.11ID:2+GDL4RD
JAVA自体がDQN
288uy ◆Qawu9.2l1E
2015/12/14(月) 20:57:26.55ID:J5PYIleC Freeし忘れ
↑これ。
ソースコード書いてる人間の注意力次第でバグが入るなら
言語も設計も間違ってるよ
↑これ。
ソースコード書いてる人間の注意力次第でバグが入るなら
言語も設計も間違ってるよ
289デフォルトの名無しさん
2015/12/14(月) 21:54:10.80ID:ETDpPCfc 動的型言語
↑
これ
コード書いている人間の注意力次第でtypoするだけで
実行するまでわからないバグが入るなら
言語も設計も間違ってるよ
↑
これ
コード書いている人間の注意力次第でtypoするだけで
実行するまでわからないバグが入るなら
言語も設計も間違ってるよ
290デフォルトの名無しさん
2015/12/14(月) 22:23:00.81ID:lNUL9lX8 C#でcatchやfinally書くの嫌すぎる
C++に戻りたい
C++に戻りたい
291デフォルトの名無しさん
2015/12/14(月) 22:43:08.79ID:bhzmg0NL >>290
おかえり
おかえり
292デフォルトの名無しさん
2015/12/15(火) 06:39:51.52ID:gQhFMQgY (ヽ´ω`)眠い
293デフォルトの名無しさん
2015/12/16(水) 08:46:15.45ID:fgV80IeN >>290
C++/CLR「こっちこいよ」
C++/CLR「こっちこいよ」
294デフォルトの名無しさん
2015/12/17(木) 17:18:40.36ID:Szn4FINI COMのVariantとかJSとかリークしまくりだし
295デフォルトの名無しさん
2015/12/17(木) 23:16:36.40ID:kltDf5Nv そういやVBScriptって参照カウンタ以外のGC積んでんのあれ
必要には見えないんだけど
必要には見えないんだけど
296デフォルトの名無しさん
2015/12/18(金) 23:17:49.50ID:b1Otx84Y プログラマはMacを使ってるってマジ?
http://hayabusa3.2ch.net/test/read.cgi/news/1450395043/
http://hayabusa3.2ch.net/test/read.cgi/news/1450395043/
297デフォルトの名無しさん
2015/12/19(土) 07:07:37.11ID:qL4RiVer マカーってどんだけアホなの?
298デフォルトの名無しさん
2015/12/19(土) 12:49:09.79ID:EW8XrhCB 解放処理
すら、まともにお前ら管理できねーのかよ・・・・・・・・・・・・・・・・。そらオレが完璧な仕様書渡してもバグってるわけだ
すら、まともにお前ら管理できねーのかよ・・・・・・・・・・・・・・・・。そらオレが完璧な仕様書渡してもバグってるわけだ
299デフォルトの名無しさん
2015/12/19(土) 13:38:07.82ID:i3zp3GbO 開放処理を手動でやれって書いてある仕様書かw
御免こうむるwwwww
御免こうむるwwwww
300デフォルトの名無しさん
2015/12/19(土) 14:42:49.35ID:iG82T79N ガベコレのあるPyObjectをラップするクラスをガベコレのあるDで書いたら
wxPythonで書いたクラスをDから使ったとき意味不明なタイミングで落ちるようになった
二重に管理するとだめなんかな
wxPythonで書いたクラスをDから使ったとき意味不明なタイミングで落ちるようになった
二重に管理するとだめなんかな
301デフォルトの名無しさん
2015/12/19(土) 15:57:38.71ID:qL4RiVer >>298
プププ 馬鹿だこいつw
プププ 馬鹿だこいつw
302デフォルトの名無しさん
2015/12/20(日) 08:46:23.14ID:gr0U1KS4 ガベージコレクションはたしかに便利だ
だからといって「本来はてめぇのケツはてめぇで拭け=自分で解放すること」を忘れてはならない
そんだけ
だからといって「本来はてめぇのケツはてめぇで拭け=自分で解放すること」を忘れてはならない
そんだけ
303デフォルトの名無しさん
2015/12/20(日) 11:55:11.08ID:HXRBhwTH C#ではSafeHandleだけ作って後は放置
usingも使わないってのがトレンドだけどね
自分で解放とかバカバカしい
面倒はランタイムに見させて開発者はドメイン設計に集中するって目的を見失うな
usingも使わないってのがトレンドだけどね
自分で解放とかバカバカしい
面倒はランタイムに見させて開発者はドメイン設計に集中するって目的を見失うな
304デフォルトの名無しさん
2015/12/20(日) 12:13:23.36ID:ofrSOHxv >>303
オブジェクトの開放を他と独立にやれるケースばかりならそう言えるかもしれんが
オブジェクトAとBがリソースCに依存しているケースでA、Bの開放の少なくとも片方をGCに任せる場合、
リソースCの参照カウンタなりをつかった防護策をプログラマーが書かねばならない
しかしそんな嫌ったらしい雑用を増やすぐらいなら
Cオープン
A生成
B生成
A, B使用
B開放
A開放
Cクローズ
でええやん?
さらにダンプファイルとかからの障害解析において、オブジェクトが生きているべきなのか死んでいるべきなのか決まっていないとか、
アドレスがはっきりしないとか言う状況は地獄
オブジェクトの開放を他と独立にやれるケースばかりならそう言えるかもしれんが
オブジェクトAとBがリソースCに依存しているケースでA、Bの開放の少なくとも片方をGCに任せる場合、
リソースCの参照カウンタなりをつかった防護策をプログラマーが書かねばならない
しかしそんな嫌ったらしい雑用を増やすぐらいなら
Cオープン
A生成
B生成
A, B使用
B開放
A開放
Cクローズ
でええやん?
さらにダンプファイルとかからの障害解析において、オブジェクトが生きているべきなのか死んでいるべきなのか決まっていないとか、
アドレスがはっきりしないとか言う状況は地獄
305デフォルトの名無しさん
2015/12/20(日) 12:21:54.48ID:ofrSOHxv つかこの世はうつろうもののであって、物理的ハードウェアでプログラムを実行する限り、
計算モデルは明らかに状態遷移ベース(チューリングマシン)の方に分がある
GCとかチューリングマシンで無理矢理関数型プログラミングを行うためのつなぎの技術、
いわば邪道
どんだけ蛇が出てくるか、GCの方がかえってわからん
計算モデルは明らかに状態遷移ベース(チューリングマシン)の方に分がある
GCとかチューリングマシンで無理矢理関数型プログラミングを行うためのつなぎの技術、
いわば邪道
どんだけ蛇が出てくるか、GCの方がかえってわからん
306デフォルトの名無しさん
2015/12/20(日) 13:48:14.94ID:HXRBhwTH307デフォルトの名無しさん
2015/12/20(日) 13:52:55.68ID:8RLYRFXT メモリ空間は無限であるべき
使い終わったメモリの断片化なにそれ?
仮想メモリを管理するのはCPUの責任だろ
使い終わったメモリの断片化なにそれ?
仮想メモリを管理するのはCPUの責任だろ
308デフォルトの名無しさん
2015/12/20(日) 14:03:49.29ID:ofrSOHxv309デフォルトの名無しさん
2015/12/20(日) 14:28:20.48ID:i39XsMQ2 >>308
そんなあっちこっちから同時にリソース掴みに行く設計が悪いって最初からわかってて言ってるんだろ?
意見を否定するためだけの極端な反例(この場合は例にすらなっていないが)を引き合いに出すのは不毛だよ
そんなあっちこっちから同時にリソース掴みに行く設計が悪いって最初からわかってて言ってるんだろ?
意見を否定するためだけの極端な反例(この場合は例にすらなっていないが)を引き合いに出すのは不毛だよ
310デフォルトの名無しさん
2015/12/20(日) 14:35:53.96ID:xl2QwS3M >>303
いい加減だなぁw
いい加減だなぁw
311デフォルトの名無しさん
2015/12/20(日) 14:36:58.02ID:ofrSOHxv312デフォルトの名無しさん
2015/12/20(日) 14:42:20.07ID:ofrSOHxv 解決策の一つはActive ObjectパターンでリソースCの管理を1スレッドXにやらせて
Cに対する要求を全部Xのキューにシリアル化して入れさせるというのがあるが、それはそれで
リソースCを使う全てのオブジェクトがスレッドXに依存するから、Xの開放コードが面倒なことになりかねない
かつ、シリアル化はマルチコア時代のせっかくの並列実行性能を殺してしまう
GCに合わせて生きることは、神仙にでもならねば到底かなわぬ…
Cに対する要求を全部Xのキューにシリアル化して入れさせるというのがあるが、それはそれで
リソースCを使う全てのオブジェクトがスレッドXに依存するから、Xの開放コードが面倒なことになりかねない
かつ、シリアル化はマルチコア時代のせっかくの並列実行性能を殺してしまう
GCに合わせて生きることは、神仙にでもならねば到底かなわぬ…
313デフォルトの名無しさん
2015/12/20(日) 14:44:35.05ID:ZDEpjFBd つくづく、ARC最強だな。
314デフォルトの名無しさん
2015/12/20(日) 14:46:27.58ID:i39XsMQ2315デフォルトの名無しさん
2015/12/20(日) 14:48:11.36ID:ofrSOHxv316デフォルトの名無しさん
2015/12/20(日) 14:51:52.93ID:i39XsMQ2 だから同時に書く設計が悪いんだって
気合入れて設計を見直してみろ
そんな必要はないってわかるから
気合入れて設計を見直してみろ
そんな必要はないってわかるから
317デフォルトの名無しさん
2015/12/20(日) 14:55:30.48ID:ofrSOHxv ていうか>>316の言っていることはますます矛盾で、
>同時に書く設計が悪い
>そんな必要はないってわかる
というのは明白に「書き込みの順序を設計できる」ということを言っていて、
それはその通り(チューリングマシンの計算モデルに合致する)ので別段漏れの立場と対立するものではなく、
かつ気合を入れて設計すれば順序で全て解決する(GCは不要である)という言明でもある
>同時に書く設計が悪い
>そんな必要はないってわかる
というのは明白に「書き込みの順序を設計できる」ということを言っていて、
それはその通り(チューリングマシンの計算モデルに合致する)ので別段漏れの立場と対立するものではなく、
かつ気合を入れて設計すれば順序で全て解決する(GCは不要である)という言明でもある
318デフォルトの名無しさん
2015/12/20(日) 15:17:45.93ID:14eB8c4R >>315
もはやGCがどう関係するのかわからない
もはやGCがどう関係するのかわからない
319デフォルトの名無しさん
2015/12/20(日) 15:20:28.11ID:i39XsMQ2320デフォルトの名無しさん
2015/12/20(日) 17:05:42.48ID:6vo8OCaj >>319
>>308を変な例変な例というばかりでGCを用いた正しい解決方法が一向に示されない件について:
繰り返しになるが、>>308のオブジェクトDのケースはどう解決すんのさ…
たとえ変でも反例は反例だし
>>308のリソースCがファイルなのだとしたら、病的な反例というほど例外的想定でもない
読み書き順序の設計の必要性(破壊的代入前提のプログラミング)を口にしつつ
>使い終わったという言葉が示す通り使い終わったならどうなろうが知った事ではない (>306)
と言い切ることはできないとかそういう話
で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>306)
>>318
ウィンドウシステムでの描画は一般に裏VRAMに描いてハードウェアでBitBlt転送するが
裏VRAMに書く際のデバイスコンテキストが複数使えるが数に限りがある場合…
とか細かい話をしても通じないようならリソースCをファイルと考えてくんな
>>308を変な例変な例というばかりでGCを用いた正しい解決方法が一向に示されない件について:
繰り返しになるが、>>308のオブジェクトDのケースはどう解決すんのさ…
たとえ変でも反例は反例だし
>>308のリソースCがファイルなのだとしたら、病的な反例というほど例外的想定でもない
読み書き順序の設計の必要性(破壊的代入前提のプログラミング)を口にしつつ
>使い終わったという言葉が示す通り使い終わったならどうなろうが知った事ではない (>306)
と言い切ることはできないとかそういう話
で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>306)
>>318
ウィンドウシステムでの描画は一般に裏VRAMに描いてハードウェアでBitBlt転送するが
裏VRAMに書く際のデバイスコンテキストが複数使えるが数に限りがある場合…
とか細かい話をしても通じないようならリソースCをファイルと考えてくんな
321デフォルトの名無しさん
2015/12/20(日) 17:12:24.84ID:6vo8OCaj プチ訂正
誤: で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>306)
正: で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>308)
誤: で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>306)
正: で、現実のハードウェアは破壊的代入前提のブツばかりであるという、(>308)
322デフォルトの名無しさん
2015/12/20(日) 17:19:25.13ID:HXRBhwTH 読み込みと書き込みを別のリソースに分離したり読み書きが同時に出来るように作る
書き込みたいから読み込み終わるの待ってますってリソースの無駄だろ
書き込みたいから読み込み終わるの待ってますってリソースの無駄だろ
323デフォルトの名無しさん
2015/12/20(日) 17:21:31.86ID:ZDEpjFBd なんか参照カウントの話とマルチスレッドの話がごっちゃになってね?
324デフォルトの名無しさん
2015/12/20(日) 17:33:49.10ID:6vo8OCaj >>322
>読み込みと書き込みを別のリソースに分離したり読み書きが同時に出来るように作る
破壊的代入の世界ではそいつは常に可能とは限らない
>308の例で、リソースCがファイルXなのだとしたら、オブジェクトDが上書きすべきもあくまでファイルXでないといけない。
つまりリソース分離の余地など無い
(正確には、無理矢理ファイルA、BはファイルX、DはファイルYに分ける設計もありえるが、XとYに対する変更をいつどのように統合するかという超難題が生じる
この手の混乱は、A、BがアクセスするリソースCの開放タイミングの決定をGCに任せてサボったがために生じるのである
>読み込みと書き込みを別のリソースに分離したり読み書きが同時に出来るように作る
破壊的代入の世界ではそいつは常に可能とは限らない
>308の例で、リソースCがファイルXなのだとしたら、オブジェクトDが上書きすべきもあくまでファイルXでないといけない。
つまりリソース分離の余地など無い
(正確には、無理矢理ファイルA、BはファイルX、DはファイルYに分ける設計もありえるが、XとYに対する変更をいつどのように統合するかという超難題が生じる
この手の混乱は、A、BがアクセスするリソースCの開放タイミングの決定をGCに任せてサボったがために生じるのである
325デフォルトの名無しさん
2015/12/20(日) 18:10:09.92ID:ZDEpjFBd おいおい、バージョン管理のマージの話にまで拡張したら収集つかなくなるぞw
326デフォルトの名無しさん
2015/12/20(日) 19:32:49.85ID:i39XsMQ2 >>324
ファイルの分割は必ずしも必要ではないし更新モデルから読み取りモデルへの同期も必要ないよ
ファイルの分割は必ずしも必要ではないし更新モデルから読み取りモデルへの同期も必要ないよ
327デフォルトの名無しさん
2015/12/20(日) 19:44:06.53ID:9YX+2XWA >>323 (Rust信者で)すまんな。
ttp://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/#data-race-freedom
マルチスレッドで起きるデータ競合といった問題も、シングルスレッドで起きうるdangling pointerなどの問題も、
どっちも所有権を持つオブジェクトが無闇にいたり、変な参照関係があるから起きるんじゃないか?って言う人がおる。
根っこが同じ、あるいは近しい問題なんで、横滑りに見えても堪忍な。
ttp://smallcultfollowing.com/babysteps/blog/2015/12/18/rayon-data-parallelism-in-rust/#data-race-freedom
マルチスレッドで起きるデータ競合といった問題も、シングルスレッドで起きうるdangling pointerなどの問題も、
どっちも所有権を持つオブジェクトが無闇にいたり、変な参照関係があるから起きるんじゃないか?って言う人がおる。
根っこが同じ、あるいは近しい問題なんで、横滑りに見えても堪忍な。
328デフォルトの名無しさん
2015/12/20(日) 19:49:46.85ID:kaqci566 メモリ管理もできないんだから
データの依存関係とか関係ねえ〜〜〜〜〜〜〜〜〜〜〜〜
でおわりでは
データの依存関係とか関係ねえ〜〜〜〜〜〜〜〜〜〜〜〜
でおわりでは
329デフォルトの名無しさん
2015/12/21(月) 05:26:25.94ID:ejqZ3DMD GoogleChrome動作中のタスクマネージャーのイメージ名にsvchost.exeが見当たらない
GoogleChromeでは、svchost.exeを使用せずに、chrome.exe自身で制御しているらしい
Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 Width/1360px/1920px
GoogleChromeでは、svchost.exeを使用せずに、chrome.exe自身で制御しているらしい
Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 Width/1360px/1920px
330デフォルトの名無しさん
2015/12/21(月) 05:32:28.99ID:ejqZ3DMD その理由・・・GCは失敗。メモリは自分で管理せよ!
http://peace.2ch.net/test/read.cgi/tech/1447856699/l50
http://peace.2ch.net/test/read.cgi/tech/1447856699/l50
331デフォルトの名無しさん
2015/12/21(月) 05:35:31.18ID:ejqZ3DMD メインメモリに対するGC・・・MGC
HDDならストレージGC・・・SGC
HDDならストレージGC・・・SGC
332デフォルトの名無しさん
2015/12/21(月) 05:38:11.78ID:ejqZ3DMD GoogleChromeかsvchost.exeを使わなくなった理由・・・ページメモリGC制御が遅過ぎでお粗末だからか?
333デフォルトの名無しさん
2015/12/21(月) 05:42:27.02ID:ejqZ3DMD GoogleChrome動作中のタスクマネージャーのイメージ名にsvchost.exeが見当たらない
GoogleChromeでは、svchost.exeを使用せずに、chrome.exe自身で制御しているらしい
Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 Width/1360px/1920px
GoogleChromeでは、svchost.exeを使用せずに、chrome.exe自身で制御しているらしい
Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 Width/1360px/1920px
334デフォルトの名無しさん
2015/12/21(月) 05:45:15.43ID:ejqZ3DMD 「Svchost Process Analyzer」
svchost.exeのプロセスの中身が何かを調べて表示するフリーソフト
http://gigazine.net/news/20131114-svchost-process-analyzer/
svchost.exeのプロセスの中身が何かを調べて表示するフリーソフト
http://gigazine.net/news/20131114-svchost-process-analyzer/
335デフォルトの名無しさん
2015/12/21(月) 05:51:39.30ID:ejqZ3DMD そろそろsvchost.exeを使うソフトは使用禁止なのかも?
336デフォルトの名無しさん
2015/12/21(月) 06:11:17.64ID:ejqZ3DMD svchost.exeを使わないことでGoogleChromeは確実に応答性能が速くなっている
・・・動画マルチ再生でクラッシュしたFirefoxは見習うべき
・・・動画マルチ再生でクラッシュしたFirefoxは見習うべき
337デフォルトの名無しさん
2015/12/21(月) 06:17:26.48ID:ejqZ3DMD338デフォルトの名無しさん
2015/12/21(月) 06:40:32.08ID:ejqZ3DMD339デフォルトの名無しさん
2015/12/21(月) 06:42:41.39ID:ejqZ3DMD LG OLED TV : You Dream We Display
http://aurorawave.atspace.tv/?sop:v/VenG8TF90yA!RDVenG8TF90yA http://i1.ytimg.com/vi/VenG8TF90yA/mqdefault.jpg #AuroraWaveTV
http://aurorawave.atspace.tv/?sop:v/VenG8TF90yA!RDVenG8TF90yA http://i1.ytimg.com/vi/VenG8TF90yA/mqdefault.jpg #AuroraWaveTV
340デフォルトの名無しさん
2015/12/21(月) 06:43:24.61ID:ejqZ3DMD LG OLED TV - The Ultimate Display
http://aurorawave.atspace.tv/?sop:v/JubFjalfNIY!RDJubFjalfNIY http://i1.ytimg.com/vi/JubFjalfNIY/mqdefault.jpg #AuroraWaveTV
http://aurorawave.atspace.tv/?sop:v/JubFjalfNIY!RDJubFjalfNIY http://i1.ytimg.com/vi/JubFjalfNIY/mqdefault.jpg #AuroraWaveTV
341デフォルトの名無しさん
2015/12/21(月) 07:08:24.86ID:ejqZ3DMD LG 4K OLED: Paris and Chicago
http://aurorawave.atspace.tv/?sop:v/Hi_WWhih4n4!RDHi_WWhih4n4 http://i1.ytimg.com/vi/Hi_WWhih4n4/mqdefault.jpg #AuroraWaveTV
http://aurorawave.atspace.tv/?sop:v/Hi_WWhih4n4!RDHi_WWhih4n4 http://i1.ytimg.com/vi/Hi_WWhih4n4/mqdefault.jpg #AuroraWaveTV
342デフォルトの名無しさん
2015/12/21(月) 09:26:05.64ID:ejqZ3DMD 国別ISO登録件数 ⇒ 技術マフィア ⇒ 技術流出状況
http://www.jicqa.co.jp/09info/07newsletter/2012/no168_news1201.html
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1741.JPG
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1818.JPG
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1742-a.JPG
http://www.google.co.jp/search?q=ISO%E6%9C%AC%E9%83%A8&num=100&ie=utf-8
http://pds.exblog.jp/pds/1/200909/06/87/a0137487_22475768.jpg
http://www.jicqa.co.jp/09info/07newsletter/2012/no168_news1201.html
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1741.JPG
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1818.JPG
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1742-a.JPG
http://www.google.co.jp/search?q=ISO%E6%9C%AC%E9%83%A8&num=100&ie=utf-8
http://pds.exblog.jp/pds/1/200909/06/87/a0137487_22475768.jpg
343デフォルトの名無しさん
2015/12/21(月) 09:41:02.29ID:ejqZ3DMD344デフォルトの名無しさん
2015/12/21(月) 09:44:40.17ID:ejqZ3DMD 京がお仕置き候補に???
http://gigazine.net/news/20130618-fastest-supercomputers/
◆1位:Tianhe-2(天河二号)、中国人民解放軍国防科学技術大学
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/01_m.jpg
IntelのIvy Bridge(12コア・2.2GHz)とXeon Phi(57コア・1.1GHz)を採用し、
コア数は312万、計算速度は33.9ペタフロップス、消費電力は17.8MW
◆2位:Titan、アメリカのオークリッジ国立研究所
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/02_titan2_m.jpg
AMD Opteron 6274(16コア・2.2GHz)とNvidia Kepler(14コア・0.732GHz)を採用し、
コア数は56万640、計算速度は17.6ペタフロップス、消費電力は8.3MW
◆3位:Sequoia、アメリカのローレンス・リバモア国立研究所
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/03_8716842181_3f50ae207a_o_m.jpg
IBM BlueGene/Qを採用し、中のプロセッサーはPower BQC(16コア・1.60GHz)、
コア数は157万2864、計算速度は17.2ペタフロップス、消費電力は7.9MW
◆4位:スーパーコンピュータ京、独立行政法人理化学研究所 計算科学研究機構(AICS)
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/04_01_m.jpg
富士通 SPARC64 VIIIfx(8コア・2.0GHz)を採用し、コア数は70万5204、
計算速度は10.5ペタフロップス、消費電力は12.7MW
◆5位:Mira、アメリカのアルゴンヌ国立研究所のエネルギー部門
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/05_30292D004-72dpi_m.jpg
BM BlueGene/Qを採用し、中のプロセッサーはPower BQC(16コア・1.60GHz)、
コア数は78万6432、計算速度は8.6ペタフロップス、消費電力は3.95MW
http://gigazine.net/news/20130618-fastest-supercomputers/
◆1位:Tianhe-2(天河二号)、中国人民解放軍国防科学技術大学
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/01_m.jpg
IntelのIvy Bridge(12コア・2.2GHz)とXeon Phi(57コア・1.1GHz)を採用し、
コア数は312万、計算速度は33.9ペタフロップス、消費電力は17.8MW
◆2位:Titan、アメリカのオークリッジ国立研究所
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/02_titan2_m.jpg
AMD Opteron 6274(16コア・2.2GHz)とNvidia Kepler(14コア・0.732GHz)を採用し、
コア数は56万640、計算速度は17.6ペタフロップス、消費電力は8.3MW
◆3位:Sequoia、アメリカのローレンス・リバモア国立研究所
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/03_8716842181_3f50ae207a_o_m.jpg
IBM BlueGene/Qを採用し、中のプロセッサーはPower BQC(16コア・1.60GHz)、
コア数は157万2864、計算速度は17.2ペタフロップス、消費電力は7.9MW
◆4位:スーパーコンピュータ京、独立行政法人理化学研究所 計算科学研究機構(AICS)
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/04_01_m.jpg
富士通 SPARC64 VIIIfx(8コア・2.0GHz)を採用し、コア数は70万5204、
計算速度は10.5ペタフロップス、消費電力は12.7MW
◆5位:Mira、アメリカのアルゴンヌ国立研究所のエネルギー部門
http://i.gzn.jp/img/2013/06/18/fastest-supercomputers/05_30292D004-72dpi_m.jpg
BM BlueGene/Qを採用し、中のプロセッサーはPower BQC(16コア・1.60GHz)、
コア数は78万6432、計算速度は8.6ペタフロップス、消費電力は3.95MW
345デフォルトの名無しさん
2015/12/21(月) 09:50:17.19ID:ejqZ3DMD 気づかないかISOは中国のためにある
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1742-a.JPG
http://www.jicqa.co.jp/09info/07newsletter/2012/img/2012-0105-1742-a.JPG
346デフォルトの名無しさん
2015/12/21(月) 10:45:57.17ID:1HvlxK+M >>344
蓮舫さんに次の選挙は次点で良いですよねって言ってきて
蓮舫さんに次の選挙は次点で良いですよねって言ってきて
347デフォルトの名無しさん
2015/12/21(月) 11:12:03.51ID:1HvlxK+M >>336
ほんそれ
ほんそれ
348デフォルトの名無しさん
2015/12/21(月) 12:31:40.33ID:ejqZ3DMD349デフォルトの名無しさん
2015/12/21(月) 12:34:04.50ID:ejqZ3DMD350デフォルトの名無しさん
2015/12/21(月) 12:36:38.19ID:x6st9rMu ただしChromeはプロセスが一杯できるから
タスクマネージャ覗いた時に気持ち悪い
タスクマネージャ覗いた時に気持ち悪い
351デフォルトの名無しさん
2015/12/21(月) 16:06:45.56ID:ejqZ3DMD 64の時代だから、そろそろCore64ぐらいでイイのでは?
http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-43-metablogapi/3568.Windows_2D00_7_2D00_CPU_2D00_Usage_2D00_History_5F00_3E37E697.png
http://download.intel.com/newsroom/kits/xeon/phi/gallery/images/XeonPhiDie_02.jpg
http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-43-metablogapi/3568.Windows_2D00_7_2D00_CPU_2D00_Usage_2D00_History_5F00_3E37E697.png
http://download.intel.com/newsroom/kits/xeon/phi/gallery/images/XeonPhiDie_02.jpg
352デフォルトの名無しさん
2015/12/21(月) 16:21:26.45ID:ejqZ3DMD353デフォルトの名無しさん
2015/12/21(月) 16:33:49.61ID:ejqZ3DMD354デフォルトの名無しさん
2015/12/21(月) 16:35:11.77ID:ejqZ3DMD diginnos stickpc_02
http://www.youtube.com/watch?v=OPt0OGNQhnU&list=RDOPt0OGNQhnU
http://www.youtube.com/watch?v=OPt0OGNQhnU&list=RDOPt0OGNQhnU
355デフォルトの名無しさん
2015/12/21(月) 18:37:51.00ID:ejqZ3DMD Holiday Glam
http://aurorawave.atspace.tv/?sop:v/tEdxHgCoXss!RDtEdxHgCoXss http://i1.ytimg.com/vi/tEdxHgCoXss/mqdefault.jpg #AuroraWaveTV
http://aurorawave.atspace.tv/?sop:v/tEdxHgCoXss!RDtEdxHgCoXss http://i1.ytimg.com/vi/tEdxHgCoXss/mqdefault.jpg #AuroraWaveTV
356デフォルトの名無しさん
2015/12/21(月) 18:38:29.84ID:ejqZ3DMD Midnight Luster
http://aurorawave.atspace.tv/?sop:v/DBTd9qv_sJI!RDDBTd9qv_sJI http://i1.ytimg.com/vi/DBTd9qv_sJI/mqdefault.jpg #AuroraWaveTV
http://aurorawave.atspace.tv/?sop:v/DBTd9qv_sJI!RDDBTd9qv_sJI http://i1.ytimg.com/vi/DBTd9qv_sJI/mqdefault.jpg #AuroraWaveTV
357デフォルトの名無しさん
2015/12/21(月) 18:43:07.58ID:ejqZ3DMD Chromeの調子が良い件について・・・TCL 4K Demo: Ultra-Running Beauty
http://aurorawave.atspace.tv/?sop:v/Gg54Miwa8K4!RDHi_WWhih4n4 http://i1.ytimg.com/vi/Gg54Miwa8K4/mqdefault.jpg #AuroraWaveTV
http://aurorawave.atspace.tv/?sop:v/Gg54Miwa8K4!RDHi_WWhih4n4 http://i1.ytimg.com/vi/Gg54Miwa8K4/mqdefault.jpg #AuroraWaveTV
358デフォルトの名無しさん
2016/01/10(日) 12:45:59.41ID:LOFSek54 723 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:24:00.06 ID:rlcuxF0A0
Vivaldiの起動が遅いのは
タブのサムネイルに関係しているかもしれない
Blinkは負荷分散のため?かHDDアクセスも遅いらしい
ローカルストレージ関係がとても遅いからだ
724 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:31:29.50 ID:rlcuxF0A0
タブサムネイルを
ローカルストレージで保存するのは止めたほうがいい
タブサムネイルは直接アクセスする事
fopen();ランダム書込:fclose();ランダム読込:fopen();
読取だけならオーバーヘッドを避けるためfopen();しない
725 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:33:41.35 ID:rlcuxF0A0
命題・・・Vivaldiは遅い起動を早期解消せよ!
726 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:37:50.17 ID:rlcuxF0A0
ランダム書込用HDDスペースを作る 個数*固定サイズ
1トランザクション 個数1024個、固定サイズ256kバイト
727 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:40:34.65 ID:rlcuxF0A0
そしたら、ランダム読み書きでfopen()すればいい
オーバーヘッドを避けるためfopen();は終了のときだけ
オーバーヘッド無いだけで1000倍ほど速くなるケースも
728 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:44:26.42 ID:rlcuxF0A0
オーバーヘッドはドコにあるのか?
それはWindowsOSのフォルダ構造検索にある
フォルダ構造検索回数を省けば速くなるのだ
Vivaldiの起動が遅いのは
タブのサムネイルに関係しているかもしれない
Blinkは負荷分散のため?かHDDアクセスも遅いらしい
ローカルストレージ関係がとても遅いからだ
724 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:31:29.50 ID:rlcuxF0A0
タブサムネイルを
ローカルストレージで保存するのは止めたほうがいい
タブサムネイルは直接アクセスする事
fopen();ランダム書込:fclose();ランダム読込:fopen();
読取だけならオーバーヘッドを避けるためfopen();しない
725 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:33:41.35 ID:rlcuxF0A0
命題・・・Vivaldiは遅い起動を早期解消せよ!
726 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:37:50.17 ID:rlcuxF0A0
ランダム書込用HDDスペースを作る 個数*固定サイズ
1トランザクション 個数1024個、固定サイズ256kバイト
727 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:40:34.65 ID:rlcuxF0A0
そしたら、ランダム読み書きでfopen()すればいい
オーバーヘッドを避けるためfopen();は終了のときだけ
オーバーヘッド無いだけで1000倍ほど速くなるケースも
728 : 名無しさん@お腹いっぱい。 2016/01/10(日) 12:44:26.42 ID:rlcuxF0A0
オーバーヘッドはドコにあるのか?
それはWindowsOSのフォルダ構造検索にある
フォルダ構造検索回数を省けば速くなるのだ
359デフォルトの名無しさん
2016/01/10(日) 12:47:28.36ID:LOFSek54 Vivaldiの起動が遅いのは
タブのサムネイルに関係しているかもしれない
Blinkは負荷分散のため?かHDDアクセスも遅いらしい
ローカルストレージ関係がとても遅いからだ
タブサムネイルを
ローカルストレージで保存するのは止めたほうがいい
タブサムネイルは直接アクセスする事
fopen();ランダム書込:fclose();ランダム読込:fopen();
読取だけならオーバーヘッドを避けるためfopen();しない
命題・・・Vivaldiは遅い起動を早期解消せよ!
ランダム書込用HDDスペースを作る 個数*固定サイズ
1トランザクション 個数1024個、固定サイズ256kバイト
そしたら、ランダム読み書きでfopen()すればいい
オーバーヘッドを避けるためfopen();は終了のときだけ
オーバーヘッド無いだけで1000倍ほど速くなるケースも
オーバーヘッドはドコにあるのか?
それはWindowsOSのフォルダ構造検索にある
フォルダ構造検索回数を省けば速くなるのだ
タブのサムネイルに関係しているかもしれない
Blinkは負荷分散のため?かHDDアクセスも遅いらしい
ローカルストレージ関係がとても遅いからだ
タブサムネイルを
ローカルストレージで保存するのは止めたほうがいい
タブサムネイルは直接アクセスする事
fopen();ランダム書込:fclose();ランダム読込:fopen();
読取だけならオーバーヘッドを避けるためfopen();しない
命題・・・Vivaldiは遅い起動を早期解消せよ!
ランダム書込用HDDスペースを作る 個数*固定サイズ
1トランザクション 個数1024個、固定サイズ256kバイト
そしたら、ランダム読み書きでfopen()すればいい
オーバーヘッドを避けるためfopen();は終了のときだけ
オーバーヘッド無いだけで1000倍ほど速くなるケースも
オーバーヘッドはドコにあるのか?
それはWindowsOSのフォルダ構造検索にある
フォルダ構造検索回数を省けば速くなるのだ
360デフォルトの名無しさん
2016/01/10(日) 12:52:32.51ID:LOFSek54 fopen();のときフォルダ構造検索するようだ
361デフォルトの名無しさん
2016/01/26(火) 06:48:44.23ID:v48l+1vS やっとこの気色の悪い仕組みにトドメが刺されたか
javaとかGCが基本だけどflash();とかできるの?
javaとかGCが基本だけどflash();とかできるの?
362デフォルトの名無しさん
2016/01/26(火) 07:35:03.77ID:RBo8KHcc ゴミ言語は所詮ゴミ
363デフォルトの名無しさん
2016/01/27(水) 17:10:09.80ID: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はメモリ管理を自動化する技術だけど、今のコンピュータはメインメモリを何十ギガ積んでたりするのも普通で
メインメモリが足りなくなることはほぼ無くて、しかも仮想メモリもあるから、なおさらメモリは潤沢で・・・
むしろメインメモリ以外のリソースの方が余程貴重で、もし仮にメインメモリが足りなくなるまで
GCを発動しないアホなGCが有ったとしたらメインメモリより先に他のリソースが枯渇する状況
だからメインメモリは無駄遣いしてもよいけど、他のリソースは使い終わったら
こまめに開放しないとダメだから、いつ実行されるか分からないマークスイープ系GCの余計にRAIIな仕組みも必要なわけ
しかしこのRAIIが付け焼刃でなまっちょろい出来だったりする
C#で言えばDisposeが有るけど、C++のデストラクタのように特別扱いされておらず
ただの普通の関数でしかないので、C++のデストラクタみたいに自身のメンバ変数について
自動で芋づる式に呼び出してくれない
だから手動でメンバのDisposeを芋づる式に呼び出すコードを記述しなければならない
いちいち自身のメンバ変数にIDisposableなものが有るか無いか調べるのもひと手間かかるし
もしそうだったら自身もIDisposableにする必要があり、例の一連のイディオムを書かなければならない
当たり前にDisposeの呼び出し忘れが有ってもいけない
まるで、mallocしたらfreeするのと似ている
しかもIDisposableはコンポジションで増殖する
IDisposableなオブジェクトをコンポジションしたら、自身もIDisposableといった具合
C#のようにコンパイラマジックでなんでも実現する言語で
どうしてDisposeをC++のデストラクタみたいに特別扱いしなかったのか謎だ
364デフォルトの名無しさん
2016/01/27(水) 17:24:38.54ID:eULyfEEH 謎だといったが、理由ははっきりしていて
メンバのDisposableを自動で呼び出す為には
他で使われてないことを保証する必要があって
参照カウンタ方式のようにローコストなものなら簡単に分かるが
これでは循環参照の問題が出る
プログラマが循環参照を気にしなくてもよいことが前提の
マークスイープ系のGCを搭載した言語では設計思想が破たんするので
参照カウンタ方式は採用できないし
マークスイープ系GCでは何処からも参照されていないことがローコストに分からないので
自動でDisposeを呼び出す仕組みを用意できない
どうにもならない
結局C++の方式が一番優れている
循環参照が発生する場合はweak_ptrを使う事だけ注意を払えば
GCにまつわる他の問題が一切発生しない
メンバのDisposableを自動で呼び出す為には
他で使われてないことを保証する必要があって
参照カウンタ方式のようにローコストなものなら簡単に分かるが
これでは循環参照の問題が出る
プログラマが循環参照を気にしなくてもよいことが前提の
マークスイープ系のGCを搭載した言語では設計思想が破たんするので
参照カウンタ方式は採用できないし
マークスイープ系GCでは何処からも参照されていないことがローコストに分からないので
自動でDisposeを呼び出す仕組みを用意できない
どうにもならない
結局C++の方式が一番優れている
循環参照が発生する場合はweak_ptrを使う事だけ注意を払えば
GCにまつわる他の問題が一切発生しない
365デフォルトの名無しさん
2016/01/27(水) 17:46:52.79ID:eULyfEEH もっと言えばC#でDisposeを実装する場合でも↑は問題になる
自身のメンバのDisposeを呼んでよいのかどうなのか
完全に自分しか使ってないことが分かっているのであればDisposeを呼び出して問題ないが
あちこちから参照されている可能性があるメンバなら勝手にDisposeを呼び出してはいけない
GC任せにするか、自分で参照カウンタを実装するか
どちらにせよ、RAIIと相性が悪い
自身のメンバのDisposeを呼んでよいのかどうなのか
完全に自分しか使ってないことが分かっているのであればDisposeを呼び出して問題ないが
あちこちから参照されている可能性があるメンバなら勝手にDisposeを呼び出してはいけない
GC任せにするか、自分で参照カウンタを実装するか
どちらにせよ、RAIIと相性が悪い
366デフォルトの名無しさん
2016/01/27(水) 17:58:09.12ID:aloDWtjb 前から何度も言ってるがDisposeの実装はしていいが呼び出しは禁止
これがC#では基本だからね
リソースの使用効率が悪いとか軟弱な反論をするバカがたまにいるが
実行効率気にするならそもそも別の言語使えって話になるからな
C++CLIを使えってこった
本質を見誤るなよ
これがC#では基本だからね
リソースの使用効率が悪いとか軟弱な反論をするバカがたまにいるが
実行効率気にするならそもそも別の言語使えって話になるからな
C++CLIを使えってこった
本質を見誤るなよ
367デフォルトの名無しさん
2016/01/27(水) 18:38:52.76ID:XmqLFQFE c#の欠点はデストラクタが呼び出されるタイミングが分からないこと。
不便で仕方ないや。
不便で仕方ないや。
368デフォルトの名無しさん
2016/01/27(水) 18:56:08.53ID:VDkVQpP+ 最近VB.NETを使い始めたんだけど
new したオブジェクトが不要になった時にDispose()よんだり参照にNothing代入する必要ってない(やってもいいが無意味・無駄)なのかな?
new したオブジェクトが不要になった時にDispose()よんだり参照にNothing代入する必要ってない(やってもいいが無意味・無駄)なのかな?
369デフォルトの名無しさん
2016/01/28(木) 08:05:17.75ID:oip5UtLa c++のデストラクタは例外投げられないウンコ仕様
だから皆デストラクタ内で発生したエラーは握り潰してる
他の言語はあんなバカなの真似する必要ない
だから皆デストラクタ内で発生したエラーは握り潰してる
他の言語はあんなバカなの真似する必要ない
370デフォルトの名無しさん
2016/01/28(木) 17:53:06.50ID:M0BYpVOa デストラクタで投げるなよ。迷惑な奴だな。
371デフォルトの名無しさん
2016/01/28(木) 18:02:00.92ID:xwQj4KRs javaはファイナライザで発生した例外は握りつぶすことが仕様で決まっているな。
c++の場合は、デストラクタでどうしても例外を外に伝えたかったらやりようはある。
c++の場合は、デストラクタでどうしても例外を外に伝えたかったらやりようはある。
372デフォルトの名無しさん
2016/01/30(土) 01:11:50.31ID:QZN0GaAw そら伝えたかったらやりようはいくらでもあるでしょう?C++に限らず
373デフォルトの名無しさん
2016/02/10(水) 11:29:59.19ID:lL2Wg2mH Javaは強制的に解放させることもできるようにすべきだったな。
374デフォルトの名無しさん
2016/02/10(水) 11:41:46.63ID:83b7Yxnh Java(VM)は(すべてのプラットフォームで)強制的に解放させることもできるようにすべきだったな。
375デフォルトの名無しさん
2016/02/10(水) 12:19:44.29ID:k9iR7lzz 都度メモリ管理するよか、GCに任せた方がスループット的に有利な場合も多いでしょ。
376デフォルトの名無しさん
2016/02/10(水) 14:29:59.29ID:CcpqYYAq GCはメモリ管理に関しては成功してる、
でも、メモリブロックをオブジェクトに昇格させたにも関わらず、相変わらず「メモリ管理」だから失敗。
でも、メモリブロックをオブジェクトに昇格させたにも関わらず、相変わらず「メモリ管理」だから失敗。
377デフォルトの名無しさん
2016/02/10(水) 17:29:46.71ID:+sMp0qjD そうそう、メインメモリの管理に関しては100%成功している
しかし、今やメインメモリはそれほど貴重なものではないわけだがな
コンシューマでも数十GB積んでたりは珍しくない
メインメモリがなくなるより他のリソースが枯渇する方が現実的
だからメインメモリ以外のリソースに関しては使い終わったら即座に開放してほしいから
GCとは別にRAIIを行う仕組みを導入するわけだが
真剣に考えていくと、RAIIはGCと相性が悪い
そもそも使い終わったら自動で即座に開放(RAII)できるなら全てのGCはそう実装すべきで
それが出来ないからわざわざコストのかかるマークスイープを遅延して実行しているわけだからな
C++みたいにGCを参照カウンタ方式にして、プログラマが人力で循環参照が無いことを保証する以外に
あちこちから参照されるオブジェクトのRAIIを自動化する方法は無い
しかし、今やメインメモリはそれほど貴重なものではないわけだがな
コンシューマでも数十GB積んでたりは珍しくない
メインメモリがなくなるより他のリソースが枯渇する方が現実的
だからメインメモリ以外のリソースに関しては使い終わったら即座に開放してほしいから
GCとは別にRAIIを行う仕組みを導入するわけだが
真剣に考えていくと、RAIIはGCと相性が悪い
そもそも使い終わったら自動で即座に開放(RAII)できるなら全てのGCはそう実装すべきで
それが出来ないからわざわざコストのかかるマークスイープを遅延して実行しているわけだからな
C++みたいにGCを参照カウンタ方式にして、プログラマが人力で循環参照が無いことを保証する以外に
あちこちから参照されるオブジェクトのRAIIを自動化する方法は無い
378デフォルトの名無しさん
2016/02/10(水) 20:59:51.38ID:rEABlirv JAVAはクソ
379デフォルトの名無しさん
2016/02/10(水) 21:00:45.91ID:ZQ/yQmxu 簡単だよ
スレッド立ててGCをフルサイクル実行し続けるだけ
スレッド立ててGCをフルサイクル実行し続けるだけ
380デフォルトの名無しさん
2016/02/11(木) 16:22:39.56ID:vxbPXQEr javaもsandy-bridge以降でSSDとかならそれほど重いってわけじゃないけど
相変わらずatomでeMMCだったりする環境も並行して存在してて
そこで動かすと改めて糞だと思うわけよ
GCが悪いんじゃなくてjavaランタイムが悪いんだろうけどね
相変わらずatomでeMMCだったりする環境も並行して存在してて
そこで動かすと改めて糞だと思うわけよ
GCが悪いんじゃなくてjavaランタイムが悪いんだろうけどね
381デフォルトの名無しさん
2016/02/11(木) 19:04:56.18ID:EuRhj+pR フラッシュとJAVAは、システムに見つかり次第、速攻アンインストールしている
382デフォルトの名無しさん
2016/02/12(金) 08:32:20.35ID:Uwfak+5B >>377
Pythonみたいに参照カウント+GC(循環参照を解放するため)が最強ってこと?
Pythonみたいに参照カウント+GC(循環参照を解放するため)が最強ってこと?
383デフォルトの名無しさん
2016/02/13(土) 15:34:22.04ID:OKKAbu21 最近のPC環境でも贅沢が過ぎるプログラムは動かん。
最近の奴だと、Node.jsのパッケージマネージャnpmが`npm search`と初回に打つとパッケージ検索用のインデックスを作ろうとするんだけど、
1つのjsonオブジェクトにまとめようとするからかOOMエラーを吐いて失敗するっていう不具合。
npmに登録されてるパッケージ数が膨大になったせいもあるが、設計を間違えると遅いどころか動かなくなる。
最近の奴だと、Node.jsのパッケージマネージャnpmが`npm search`と初回に打つとパッケージ検索用のインデックスを作ろうとするんだけど、
1つのjsonオブジェクトにまとめようとするからかOOMエラーを吐いて失敗するっていう不具合。
npmに登録されてるパッケージ数が膨大になったせいもあるが、設計を間違えると遅いどころか動かなくなる。
384デフォルトの名無しさん
2016/02/13(土) 22:32:48.48ID:6Xm9VASh GCがある言語でRAIIみたいな事したいのなら
loan patten使えばいいだけでは
loan patten使えばいいだけでは
385デフォルトの名無しさん
2016/02/13(土) 23:42:47.95ID:VLo29AwR リソースを共有した上で最後の参照が切れた時点で回収してほしい
しかし誰が共有するかもその寿命も実行時までわからない
そういう前時代的なダサい設計をした時の話しなんだろ
Loan Patternはこの状況では役に立たない
しかし誰が共有するかもその寿命も実行時までわからない
そういう前時代的なダサい設計をした時の話しなんだろ
Loan Patternはこの状況では役に立たない
386デフォルトの名無しさん
2016/02/14(日) 00:56:38.97ID:mwiD0ozs しかし、言語側は、そういうダサい設計も許さないといけないので
マークスイープ系GC搭載で、循環参照が有っても良いことが前提になっている言語で
「使い終わったら自動で即座に開放」を実現するのは困難
そんなことが可能なら、マークスイープは要らないからな
マークスイープ系GC搭載で、循環参照が有っても良いことが前提になっている言語で
「使い終わったら自動で即座に開放」を実現するのは困難
そんなことが可能なら、マークスイープは要らないからな
387デフォルトの名無しさん
2016/02/14(日) 19:42:04.72ID:I7Qc+kxz 循環参照なんて放置すればいいの
どうせプロセスが終了すればOSが開放してくれるの
どうせプロセスが終了すればOSが開放してくれるの
388デフォルトの名無しさん
2016/02/14(日) 20:10:25.23ID:EqhxGdNa >>387
Windowsのように定期的に再起動しなければいけないソフトウェアができあがっちゃいそう
Windowsのように定期的に再起動しなければいけないソフトウェアができあがっちゃいそう
389デフォルトの名無しさん
2016/02/15(月) 18:16:17.47ID:TvNTryet ErlangでOS作るか
390デフォルトの名無しさん
2016/02/15(月) 19:50:44.55ID:L+A+Kd2h そこはRustで
391デフォルトの名無しさん
2016/03/01(火) 15:00:17.89ID:QERDe7Jh 5分でわかるガベージコレクションの仕組み
https://geechs-magazine.com/tag/tech/20160229
https://geechs-magazine.com/tag/tech/20160229
392デフォルトの名無しさん
2016/03/23(水) 02:31:06.32ID:MFzvJNSi 常識的に考えてカーネルの実装にはGCなんて使えないし
業務アプリケーションではパフォーマンスより開発速度がはるかに重要になる
結局適材適所だ
GCを強制されるのは苦痛だが使えないのも苦痛だ
好きな時に使える言語がいいよね!
業務アプリケーションではパフォーマンスより開発速度がはるかに重要になる
結局適材適所だ
GCを強制されるのは苦痛だが使えないのも苦痛だ
好きな時に使える言語がいいよね!
393デフォルトの名無しさん
2016/03/23(水) 03:41:39.64ID:SoMbpeP6 パフォーマンスが問題にならないGCが一つだけあって、それが参照カウンタ方式のGC
パフォーマンスが問題にならない→即座に逐一削除できる→RAIIが出来る
非常に強力だがプログラマが循環参照が無いことを保証しなければならない
しかし、循環参照が発生する場合は設計段階で分かるのでそれほど深刻では無いのだ!
パフォーマンスが問題にならない→即座に逐一削除できる→RAIIが出来る
非常に強力だがプログラマが循環参照が無いことを保証しなければならない
しかし、循環参照が発生する場合は設計段階で分かるのでそれほど深刻では無いのだ!
394デフォルトの名無しさん
2016/03/23(水) 03:47:03.14ID:VzK80P8k androidでもう何も判らん状態でプログラミングして
それなりに動くのができたからおれは許したよ
でもサービスまで勝手に回収されちゃうとは思わなかったわ
アホだろグーグル
それなりに動くのができたからおれは許したよ
でもサービスまで勝手に回収されちゃうとは思わなかったわ
アホだろグーグル
395デフォルトの名無しさん
2016/03/23(水) 07:53:14.58ID:JT2FURwc RAIIに必要なのはデストラクタが呼ばれることであって実際にメモリが解放されることじゃないから
GC言語でもRAIIができないわけじゃない。
GC言語でもRAIIができないわけじゃない。
396デフォルトの名無しさん
2016/03/23(水) 10:07:19.06ID:SB04Y3rp RAIIに必要なのは適切なタイミングで確実に解放処理が呼ばれることであって
いつ呼ばれるかわからないデストラクタではだめ
いつ呼ばれるかわからないデストラクタではだめ
397デフォルトの名無しさん
2016/03/23(水) 18:24:05.29ID:jWiL+V+6 かつてStandard MLの実装で、GCじゃないメモリ管理方法をやってみたのがあったな。
コンパイラが全部自動でやるからコードの見た目はSMLなんだけど、いざ動かすとGCより遅かった。
ある程度プログラマがリソース管理のためのヒントを与えないと、GCを捨てられない。
コンパイラが全部自動でやるからコードの見た目はSMLなんだけど、いざ動かすとGCより遅かった。
ある程度プログラマがリソース管理のためのヒントを与えないと、GCを捨てられない。
398デフォルトの名無しさん
2016/03/23(水) 20:05:29.02ID:JT2FURwc399デフォルトの名無しさん
2016/03/23(水) 21:43:30.89ID:SoMbpeP6 この際、呼び名はどうでも良い
参照カウンタ方式以外のGCでは、どこからも参照されなくなったことが、即座にはわからない
だから、自動で即座に開放関数を呼び出すことが出来ない→RAIIが出来ない
C#で言うところのusingみたいに、プログラマが手動で情報を与えるなら出来る
だが、usingはGCでは無い
参照カウンタ方式以外のGCでは、どこからも参照されなくなったことが、即座にはわからない
だから、自動で即座に開放関数を呼び出すことが出来ない→RAIIが出来ない
C#で言うところのusingみたいに、プログラマが手動で情報を与えるなら出来る
だが、usingはGCでは無い
400デフォルトの名無しさん
2016/03/24(木) 00:53:54.57ID:smGLwjga いまさら、ゲームキューブ叩いてどうするんだ?
401デフォルトの名無しさん
2016/03/26(土) 05:40:22.28ID:vD3g1idC >>393
間違い
マークスイープのように負荷が集中しないだけでありパフォーマンスへの影響はある
特にツリー状のデータついてルートが削除された時子要素もデクリメントする必要があるため負荷が大きい
カウンタはオブジェクト毎に持つためコピーオンライトとの相性が悪い
また言語の機能として実装されなければ明示的に行う必要がある(例えばCとか)
そのためgcない言語ではマークスイープと比べ非常に面倒なことになる
間違い
マークスイープのように負荷が集中しないだけでありパフォーマンスへの影響はある
特にツリー状のデータついてルートが削除された時子要素もデクリメントする必要があるため負荷が大きい
カウンタはオブジェクト毎に持つためコピーオンライトとの相性が悪い
また言語の機能として実装されなければ明示的に行う必要がある(例えばCとか)
そのためgcない言語ではマークスイープと比べ非常に面倒なことになる
402デフォルトの名無しさん
2016/03/26(土) 10:35:48.15ID:GKwGPSgf androidで原因不明のフリーズが発生、プロジェクトはデスマーチに突入した
これだからGCは
これだからGCは
403デフォルトの名無しさん
2016/03/26(土) 11:39:27.66ID:drxQ1xsy これだからGCに頼りきった未熟者は
404デフォルトの名無しさん
2016/03/26(土) 11:39:40.83ID:MgEq8J/o405デフォルトの名無しさん
2016/03/26(土) 18:02:09.56ID:2IjmMYr5 マルチスレッド環境だと参照カウンタとかいうクソアルゴリズムは使い物にならない
406デフォルトの名無しさん
2016/03/26(土) 18:52:26.07ID:QL60ocAy 参照カウンタがオーバーフローしたらどうなんの?
407デフォルトの名無しさん
2016/03/26(土) 19:10:36.57ID:nXtJgRqN408デフォルトの名無しさん
2016/03/26(土) 19:44:45.11ID:R9brpoqy >>406
殿堂入りさせて、回収しない
殿堂入りさせて、回収しない
409デフォルトの名無しさん
2016/03/26(土) 20:22:44.37ID:QL60ocAy410デフォルトの名無しさん
2016/03/26(土) 20:52:01.21ID:rTAUpSul 使う側は少なくとも1つのポインタを持たなくちゃいけないんだからオーバーフローし得ないだろ
411デフォルトの名無しさん
2016/03/26(土) 22:10:23.58ID:6zuFQelp マルチスレッドでGCスレッド立ち上げて、再配置起こる可能性のある普通のGCだと、オブジェクト毎にLock,Unlockできる何らかの機構が必要だし、参照カウンタ増減するより高頻度でその機構使うよね。
412デフォルトの名無しさん
2016/03/26(土) 22:34:25.82ID:2IjmMYr5 そうでもない
413デフォルトの名無しさん
2016/03/26(土) 23:56:59.65ID:MgEq8J/o 例えばWindowsだとInterlocked系のAPIを使えば
マルチスレッドでも安全に参照カウンタを増減できるから
パフォーマンスは何の問題もない
マルチスレッドでも安全に参照カウンタを増減できるから
パフォーマンスは何の問題もない
414デフォルトの名無しさん
2016/03/27(日) 00:13:33.76ID:MdJCnp0Y C#なら参照のコピーはただのワード代入で済む
メモリ確保もポインタへの加算だけで済むから圧倒的に速い
回収もマルチスレッドで処理されるから圧縮フェーズ以外はUIへの影響もなくユーザ目線では実質コストゼロ
良いコードを書いてるなら圧縮もたまにしか起こらないし起こっても大した事ない
メモリ確保もポインタへの加算だけで済むから圧倒的に速い
回収もマルチスレッドで処理されるから圧縮フェーズ以外はUIへの影響もなくユーザ目線では実質コストゼロ
良いコードを書いてるなら圧縮もたまにしか起こらないし起こっても大した事ない
415デフォルトの名無しさん
2016/03/27(日) 00:26:17.07ID:vj+h39OC >>399からの流れを見ればわかるがそういう話ではない
参照カウンタ方式以外のGCは、オブジェクトがどこからも参照されなくなったことが「即座」にわからない
だからRAIIが出来ない、そういう話
もちろん、参照の値が書き換わるたびに毎回マークスイープを実行すれば
即座にゴミが分かるがのでRAII出来るが、マークスイープは重いので参照が書き換わるたびに毎回実行できない
その意味で、循環参照以外のGCは重いと言っている
参照カウンタ方式は軽いので毎回実行できる
即座にゴミが分かるからRAIIが出来る
参照カウンタ方式で問題になるのは循環参照が起こった場合だが
循環参照が発生する箇所は設計段階で分かるので、実際には大した問題ではない
C++であれば、片方をweak_ptrにすればよいというだけの話
そこさえ気を付ければ、参照カウンタ方式とデストラクタの組み合わせは非常にうまく機能する
IDisposableのようなものも要らない
参照カウンタ方式以外のGCは、オブジェクトがどこからも参照されなくなったことが「即座」にわからない
だからRAIIが出来ない、そういう話
もちろん、参照の値が書き換わるたびに毎回マークスイープを実行すれば
即座にゴミが分かるがのでRAII出来るが、マークスイープは重いので参照が書き換わるたびに毎回実行できない
その意味で、循環参照以外のGCは重いと言っている
参照カウンタ方式は軽いので毎回実行できる
即座にゴミが分かるからRAIIが出来る
参照カウンタ方式で問題になるのは循環参照が起こった場合だが
循環参照が発生する箇所は設計段階で分かるので、実際には大した問題ではない
C++であれば、片方をweak_ptrにすればよいというだけの話
そこさえ気を付ければ、参照カウンタ方式とデストラクタの組み合わせは非常にうまく機能する
IDisposableのようなものも要らない
416デフォルトの名無しさん
2016/03/27(日) 00:27:10.73ID:vj+h39OC >循環参照以外のGCは重いと言っている
↑間違えた
参照カウンタ方式以外のGCは重いと言っている
↑間違えた
参照カウンタ方式以外のGCは重いと言っている
417デフォルトの名無しさん
2016/03/27(日) 00:41:23.52ID:15KjVKPo418デフォルトの名無しさん
2016/03/27(日) 00:59:17.81ID:kBj57j3O 前にも書いたが、RAIIとGCは直接の関係はないよ。
現にC++/CLIでは、ローカルスコープのオブジェクトがスコープを抜けた時点、あるいは
gcnewで作成されたオブジェクトがdeleteされた時点で即座にデストラクタが実行されて
メモリの回収自体はGCで行われる。
現にC++/CLIでは、ローカルスコープのオブジェクトがスコープを抜けた時点、あるいは
gcnewで作成されたオブジェクトがdeleteされた時点で即座にデストラクタが実行されて
メモリの回収自体はGCで行われる。
419デフォルトの名無しさん
2016/03/27(日) 01:02:24.98ID:MdJCnp0Y420デフォルトの名無しさん
2016/03/27(日) 01:31:49.74ID:vj+h39OC >ローカルスコープのオブジェクトがスコープを抜けた時点、あるいは
>gcnewで作成されたオブジェクトがdeleteされた時点で即座にデストラクタが実行されて
>メモリの回収自体はGCで行われる。
それはGC関係ないRAIIの話だろ
C#でもusing使えばRAII出来るが
usingも、ローカル変数も、deleteも、何れもGCじゃない
手動で寿命管理しているに過ぎない
寿命管理を自動化(GC)しつつ、RAIIを実現する話をしているわけだが
どんな場合でも、GCで有ろうが無かろうが、手動でデストラクタなりファイナライザなり呼び出せば
RAII出来るに決まっているだろ、それに何の意味が有るんだよ
自動化の話だよ
>gcnewで作成されたオブジェクトがdeleteされた時点で即座にデストラクタが実行されて
>メモリの回収自体はGCで行われる。
それはGC関係ないRAIIの話だろ
C#でもusing使えばRAII出来るが
usingも、ローカル変数も、deleteも、何れもGCじゃない
手動で寿命管理しているに過ぎない
寿命管理を自動化(GC)しつつ、RAIIを実現する話をしているわけだが
どんな場合でも、GCで有ろうが無かろうが、手動でデストラクタなりファイナライザなり呼び出せば
RAII出来るに決まっているだろ、それに何の意味が有るんだよ
自動化の話だよ
421デフォルトの名無しさん
2016/03/27(日) 01:33:16.88ID:vj+h39OC >そもそも不可視のコードでリソースを解放するのが愚行そのもの
その最たるものが、マークスイープ系GCなわけですが
いつ実行されるかすら分からない
まさに不可視
その最たるものが、マークスイープ系GCなわけですが
いつ実行されるかすら分からない
まさに不可視
422デフォルトの名無しさん
2016/03/27(日) 01:51:43.15ID:vj+h39OC 極端な話
mallocして使い終わったらfreeして
はい、手動でRAII出来ました!って主張
それ何の意味が有る話なの?ってね
mallocして使い終わったらfreeして
はい、手動でRAII出来ました!って主張
それ何の意味が有る話なの?ってね
423デフォルトの名無しさん
2016/03/27(日) 07:41:27.84ID:kBj57j3O >>420
>それはGC関係ないRAIIの話だろ
メモリはGCで回収されると書いたが?あと、そもそもRAII自体がGCと直接関係ないとも書いた。
>usingも、ローカル変数も、deleteも、何れもGCじゃない
いずれもメモリ領域はGCで回収される。
>どんな場合でも、GCで有ろうが無かろうが、手動でデストラクタなりファイナライザなり呼び出せば
>RAII出来るに決まっているだろ、それに何の意味が有るんだよ
ローカルスコープに置いたオブジェクトは手動で呼ぶ必要はない。
gcnewで作成したものにはdeleteを使うってのは普通のC++と同じだ。
ローカルスコープの変数を基点に、スコープを抜けたときに連鎖的にデストラクタが呼ばれて
delete等の後始末がされるってのがRAIIだからな。
普通のC++ではそのdeleteのときにoperator deleteでメモリ領域が解放されるが、C++/CLIでは
GCで回収されるというだけ。
「GCで有ろうが無かろうが」「RAII出来るに決まっている」ということを理解したならまぁそれでいい。
できないってのを否定しただけで、別に意味があるかないかを話していたわけじゃないからな。
要は、GCを使う多くの言語でRAIIができないのはデストラクタの仕組みを持っていないからであって、
それがあるC++/CLIならRAIIも可能ということ。逆にGCを使わない言語でも、デストラクタがなければ
RAIIは不可能。
つまり最初の結論、RAIIとGCの有無に直接の関係はない。
>それはGC関係ないRAIIの話だろ
メモリはGCで回収されると書いたが?あと、そもそもRAII自体がGCと直接関係ないとも書いた。
>usingも、ローカル変数も、deleteも、何れもGCじゃない
いずれもメモリ領域はGCで回収される。
>どんな場合でも、GCで有ろうが無かろうが、手動でデストラクタなりファイナライザなり呼び出せば
>RAII出来るに決まっているだろ、それに何の意味が有るんだよ
ローカルスコープに置いたオブジェクトは手動で呼ぶ必要はない。
gcnewで作成したものにはdeleteを使うってのは普通のC++と同じだ。
ローカルスコープの変数を基点に、スコープを抜けたときに連鎖的にデストラクタが呼ばれて
delete等の後始末がされるってのがRAIIだからな。
普通のC++ではそのdeleteのときにoperator deleteでメモリ領域が解放されるが、C++/CLIでは
GCで回収されるというだけ。
「GCで有ろうが無かろうが」「RAII出来るに決まっている」ということを理解したならまぁそれでいい。
できないってのを否定しただけで、別に意味があるかないかを話していたわけじゃないからな。
要は、GCを使う多くの言語でRAIIができないのはデストラクタの仕組みを持っていないからであって、
それがあるC++/CLIならRAIIも可能ということ。逆にGCを使わない言語でも、デストラクタがなければ
RAIIは不可能。
つまり最初の結論、RAIIとGCの有無に直接の関係はない。
424デフォルトの名無しさん
2016/03/27(日) 10:01:03.80ID:MdJCnp0Y メモリとその他のリソースを混同して考えるからダメ
まずその他のリソースは不可視のコードで解放しちゃダメ
リソースのスコープは明示的でなければならない
これはデストラクタにもGCにも任せられない
逆にメモリは不可視のコードで解放してもよい
まずこの基本原則から話を進めよう
まずその他のリソースは不可視のコードで解放しちゃダメ
リソースのスコープは明示的でなければならない
これはデストラクタにもGCにも任せられない
逆にメモリは不可視のコードで解放してもよい
まずこの基本原則から話を進めよう
425デフォルトの名無しさん
2016/03/27(日) 10:12:42.93ID:Ap0rkncx schemeにはdynamic-windみたいな他所に継続が飛んでも後処理が保証される仕掛けがあるし
デストラクタがない==RAIIできないにはならないと思うの・・・
デストラクタがない==RAIIできないにはならないと思うの・・・
426デフォルトの名無しさん
2016/03/27(日) 11:03:59.82ID:+zMq83Ww427デフォルトの名無しさん
2016/03/27(日) 11:16:32.31ID:MdJCnp0Y >>426
銀の弾丸は無い
あらゆるリソースのあらゆる利用形態に対してデフォルトの動作を定義できるなら話は別だが無理だよね
結局は人が方針を決めて書くしか無い
幸いにしてメインメモリにはRAIIやマークスイープという正解が見つかっているのでそれを使えばいい
だが他のリソースはダメだ
銀の弾丸は無い
あらゆるリソースのあらゆる利用形態に対してデフォルトの動作を定義できるなら話は別だが無理だよね
結局は人が方針を決めて書くしか無い
幸いにしてメインメモリにはRAIIやマークスイープという正解が見つかっているのでそれを使えばいい
だが他のリソースはダメだ
428デフォルトの名無しさん
2016/03/27(日) 16:21:42.54ID:vj+h39OC >>423
そんな基本的なことを言って何がしたいの?
RAIIとGCは密接な関係が有るんだよ
君はローカル変数が好きみたいだから、ローカル変数の事例で説明するとする
(嫌ならC#のusingと読み替えてもらっても構わない)
ローカルに確保したオブジェクトが、メンバ変数に他のオブジェクトを持っていたとする
いわゆるコンポジションの状態、よくある話
C++で言えば、class my_class{ object *obj; }; といった感じのクラスになる、分かるよね?
で、ローカル変数はスコープを抜けたら解放される、usingも似たようなもの、これはRAIIの基本、良いね?
このとき、マークスイープ系GCだと、my_classのobjに他からの参照が有るかどうか、即座にわからないので
objを開放してよいのか判断が付かない→my_classは破棄されてもobjはGC発動まで保留される→objは残るのでRAIIの意味がない
もしくは、my_classのobjに他からの参照が全く無いことをプログラマが保証して
my_classの開放部にobjをdeleteなりdisposeなりするコードを記入する
しかしこれは、objの所有権がはっきりしていないことには使えない上に、「手動」である
C++の場合はスマポが有るのでまだましだが、C#のDisposeは完全に手動で呼ばなければならない
自身のメンバにIDisposableなメンバいたら、自身もIDisposableにしなければならず、Disposeメソッドを実装して
自身のメンバのDisposeを芋づる式に呼び出すコードを手動で書かなければならない
mallocしたらfreeしましょうと一緒で、C言語レベルの全くの手動になってしまう
参照カウンタ方式のGCではこれらの問題は発生しない
他からの参照が有るか無いかは即座にわかるし、参照カウンタが0になれば、その場で即座に破棄される
自身のメンバに対して、デストラクタは芋づる式に呼び出されるので、C#のDispose実装のような面倒さは無い
>>424
お前言ってること無茶苦茶すぎるだろ
>リソースのスコープは明示的でなければならない、デストラクタにもGCにも任せられない
GCはともかく、デストラクタでもダメって意味不明すぎるんだが
考えの根本がおかしい
そんな基本的なことを言って何がしたいの?
RAIIとGCは密接な関係が有るんだよ
君はローカル変数が好きみたいだから、ローカル変数の事例で説明するとする
(嫌ならC#のusingと読み替えてもらっても構わない)
ローカルに確保したオブジェクトが、メンバ変数に他のオブジェクトを持っていたとする
いわゆるコンポジションの状態、よくある話
C++で言えば、class my_class{ object *obj; }; といった感じのクラスになる、分かるよね?
で、ローカル変数はスコープを抜けたら解放される、usingも似たようなもの、これはRAIIの基本、良いね?
このとき、マークスイープ系GCだと、my_classのobjに他からの参照が有るかどうか、即座にわからないので
objを開放してよいのか判断が付かない→my_classは破棄されてもobjはGC発動まで保留される→objは残るのでRAIIの意味がない
もしくは、my_classのobjに他からの参照が全く無いことをプログラマが保証して
my_classの開放部にobjをdeleteなりdisposeなりするコードを記入する
しかしこれは、objの所有権がはっきりしていないことには使えない上に、「手動」である
C++の場合はスマポが有るのでまだましだが、C#のDisposeは完全に手動で呼ばなければならない
自身のメンバにIDisposableなメンバいたら、自身もIDisposableにしなければならず、Disposeメソッドを実装して
自身のメンバのDisposeを芋づる式に呼び出すコードを手動で書かなければならない
mallocしたらfreeしましょうと一緒で、C言語レベルの全くの手動になってしまう
参照カウンタ方式のGCではこれらの問題は発生しない
他からの参照が有るか無いかは即座にわかるし、参照カウンタが0になれば、その場で即座に破棄される
自身のメンバに対して、デストラクタは芋づる式に呼び出されるので、C#のDispose実装のような面倒さは無い
>>424
お前言ってること無茶苦茶すぎるだろ
>リソースのスコープは明示的でなければならない、デストラクタにもGCにも任せられない
GCはともかく、デストラクタでもダメって意味不明すぎるんだが
考えの根本がおかしい
429デフォルトの名無しさん
2016/03/27(日) 16:43:31.54ID:vj+h39OC C++で書けば
struct A{ *obj };
void func()
{
A a;
}
こういったRAIIの場合のobjの開放はどういう扱いにするんだって話
aが完全にobjを所有しているケースなら、Aのデストラクタにdelete obj;とでも書くかscoped_ptrでも使えばよい
しかし、objが彼方此方から参照されている可能性もあるので
そこんとこコンパイラは判断が付かないので、自動化はきない
あくまで、プログラマが保証する形になる
C#のDisposeのような仕組みを言語側で用意したところで、自身のメンバにIDisposableなメンバが有るかどうか
いちいち調べなきゃならなないし、調べ忘れや呼び出し忘れをするという問題が出てくる
しかも、所有権が単一である場合にしか成り立たない
一方でマークスイープ系GCに任せっぱなしにすると、objの開放はGC発動まで遅延してしまうだろう
参照カウンタはこれらの問題をすべて解決する
参照数はどのタイミングでも直ぐに分かるし、0になれば遅延なしで即座に削除される
デストラクタは自身のメンバに対して芋づる式に自動で呼び出されるので
スマポを使っておけば呼び出し忘れるということもないし
Disposeのような冗長なコードを書く必要もない
struct A{ *obj };
void func()
{
A a;
}
こういったRAIIの場合のobjの開放はどういう扱いにするんだって話
aが完全にobjを所有しているケースなら、Aのデストラクタにdelete obj;とでも書くかscoped_ptrでも使えばよい
しかし、objが彼方此方から参照されている可能性もあるので
そこんとこコンパイラは判断が付かないので、自動化はきない
あくまで、プログラマが保証する形になる
C#のDisposeのような仕組みを言語側で用意したところで、自身のメンバにIDisposableなメンバが有るかどうか
いちいち調べなきゃならなないし、調べ忘れや呼び出し忘れをするという問題が出てくる
しかも、所有権が単一である場合にしか成り立たない
一方でマークスイープ系GCに任せっぱなしにすると、objの開放はGC発動まで遅延してしまうだろう
参照カウンタはこれらの問題をすべて解決する
参照数はどのタイミングでも直ぐに分かるし、0になれば遅延なしで即座に削除される
デストラクタは自身のメンバに対して芋づる式に自動で呼び出されるので
スマポを使っておけば呼び出し忘れるということもないし
Disposeのような冗長なコードを書く必要もない
430デフォルトの名無しさん
2016/03/27(日) 16:44:43.86ID:vj+h39OC 訂正
struct A{ *obj };
void func()
{
A a;
}
↓
struct A{ object *obj };
void func()
{
A a;
}
struct A{ *obj };
void func()
{
A a;
}
↓
struct A{ object *obj };
void func()
{
A a;
}
431デフォルトの名無しさん
2016/03/27(日) 17:07:08.54ID:vj+h39OC 結局、C#のDisposeはどこまで行ってもどんなに進化しても手動で書かなければならない
自身のDisposeが呼ばれたからと言って、自身のメンバ変数のDisposeを芋づる式に勝手に呼び出して良いかは
コンパイラにはまったく判断が付かない
他からも参照されていて今まさに使われている可能性がある以上
コンパイラが勝手に自動でDisposeを呼び出すコードを生成することはできない
GCを発動してみるまでは、どこからも参照されなくなったことが保証できない
しかし、GCの発動まで開放が遅延しても良いのであれば、そもそもDisposeは要らないわけで
Disposeの実行はGC発動より先行していなければならず、GCに頼れないということになる
なので、自身のDisposeが呼ばれたときに、自身のメンバのDisposeをしてよいかは
プログラマが考え、手動で呼び出す必要が有る
所有権が単一であれば、手動でメンバのDisposeを呼び出せばよい
手動で記述しなければならないので面倒くさいし、ミスの元ではあるが、一応できる
所有権が複数であれば参照カウンタを使うしか現実的な方法は無いだろう
マークスイープ系GCなのに参照カウンタで独自に管理するのは馬鹿げているがな
参照カウンタ方式+デストラクタ
であればこれらの問題は一切発生しない
参照カウンタが0になったことは即座にわかるし、デストラクタはメンバ変数に対して芋づる式に呼び出されるので
開放に関しての特別なコードを手動で書く必要は無い
開放処理も一本化される
自身のDisposeが呼ばれたからと言って、自身のメンバ変数のDisposeを芋づる式に勝手に呼び出して良いかは
コンパイラにはまったく判断が付かない
他からも参照されていて今まさに使われている可能性がある以上
コンパイラが勝手に自動でDisposeを呼び出すコードを生成することはできない
GCを発動してみるまでは、どこからも参照されなくなったことが保証できない
しかし、GCの発動まで開放が遅延しても良いのであれば、そもそもDisposeは要らないわけで
Disposeの実行はGC発動より先行していなければならず、GCに頼れないということになる
なので、自身のDisposeが呼ばれたときに、自身のメンバのDisposeをしてよいかは
プログラマが考え、手動で呼び出す必要が有る
所有権が単一であれば、手動でメンバのDisposeを呼び出せばよい
手動で記述しなければならないので面倒くさいし、ミスの元ではあるが、一応できる
所有権が複数であれば参照カウンタを使うしか現実的な方法は無いだろう
マークスイープ系GCなのに参照カウンタで独自に管理するのは馬鹿げているがな
参照カウンタ方式+デストラクタ
であればこれらの問題は一切発生しない
参照カウンタが0になったことは即座にわかるし、デストラクタはメンバ変数に対して芋づる式に呼び出されるので
開放に関しての特別なコードを手動で書く必要は無い
開放処理も一本化される
432デフォルトの名無しさん
2016/03/27(日) 17:16:20.56ID:UGnRhUEw 長文は漏れなく基地外
433デフォルトの名無しさん
2016/03/27(日) 17:17:01.33ID:MdJCnp0Y434デフォルトの名無しさん
2016/03/27(日) 17:22:53.59ID:/D0vdPDd ポインタがメンバ変数になってたら公開しちゃいかんでしょ
435デフォルトの名無しさん
2016/03/27(日) 17:24:21.54ID:MdJCnp0Y まずDisposeは生成できる
めんどくさいという奴は知識が無いだけ
リソースを共有する事は少ない
というか設計段階で可能な限り少なくする
そして共有するならするでしっかり管理して自動解放などという手抜きはしない
基本中の基本だ
めんどくさいという奴は知識が無いだけ
リソースを共有する事は少ない
というか設計段階で可能な限り少なくする
そして共有するならするでしっかり管理して自動解放などという手抜きはしない
基本中の基本だ
436デフォルトの名無しさん
2016/03/27(日) 17:32:09.52ID:+zMq83Ww デストラクタで解放してはいけないリソースをデストラクタで解放しなければいいだけで、デストラクタで解放すればいいリソースはデストラクタで自動的に解放すべき。
437デフォルトの名無しさん
2016/03/27(日) 20:12:26.78ID:kBj57j3O >参照カウンタ方式+デストラクタ
>であればこれらの問題は一切発生しない
.NETのマーク&スイープGCの上でRAIIを実現している実例としてC++/CLIを説明したんだが、
「基本的なこと」とか言いながら結局何も理解してないんだな。
そもそもRAIIの話で所有権が共有されたオブジェクトを持ち出すのが意味不明すぎる。
>参照カウンタが0になったことは即座にわかるし、
「いつか」全員が所有権を手放したら「即座に」破棄される
「いつか」全員が所有権を手放したら「いつか」GCで破棄される
どう違うというのか。
>であればこれらの問題は一切発生しない
.NETのマーク&スイープGCの上でRAIIを実現している実例としてC++/CLIを説明したんだが、
「基本的なこと」とか言いながら結局何も理解してないんだな。
そもそもRAIIの話で所有権が共有されたオブジェクトを持ち出すのが意味不明すぎる。
>参照カウンタが0になったことは即座にわかるし、
「いつか」全員が所有権を手放したら「即座に」破棄される
「いつか」全員が所有権を手放したら「いつか」GCで破棄される
どう違うというのか。
438デフォルトの名無しさん
2016/03/27(日) 20:35:08.73ID:Ng/EIIMI RAII信者の痛さは異常
オブジェクトをコピーされたら破綻するのに
オブジェクトをコピーされたら破綻するのに
439デフォルトの名無しさん
2016/03/27(日) 21:10:56.38ID:N7IGtcj3 グローバルインスタンスホルダーは明確にインスタンスの状態を把握したいときに積極的に使うべき
440デフォルトの名無しさん
2016/03/27(日) 22:32:53.86ID:vj+h39OC >「いつか」全員が所有権を手放したら「即座に」破棄される
>「いつか」全員が所有権を手放したら「いつか」GCで破棄される
>どう違うというのか。
少なくとも最善が尽くされるという意味で違うし
同じデータと同じプログラムで有れば、常に同じタイミングで開放処理が走るという再現性が有る
それから、自分しか所有権を持っていない場合、つまり参照数が常に1というシンプルな状況ですら
参照カウンタ方式の方が開放処理が自動化されて楽
参照カウンタ方式で有れば、スマポを使っておけば済む
scoped_ptrでも良い
マークスイープ系GCであれば、自身しか所有権を持たない単純な場合でも
非常に面倒なことになる
自身にDisposeを実装して自身のメンバのDisposeを呼び出すコードを手動で書かなければならない
何故こういったコードをコンパイラが自動生成できず、手動で書かなければならないのかの根底に
まさにマークスイープGCの存在が有る
マークスイープ系GCは何処からも参照されなくなったことがその場ですぐに分からない
GCを発動してみるまで保証することが出来ない
自分のDisposeが呼び出された、まさにその瞬間に、自分のメンバに対してもDisposeしてよいのかどうなのか
参照数がリアルタイムで即座に分からないので判断する材料が何も無く
コンパイラはC++のデストラクタのように自動で芋づる式に開放処理を呼び出すコードを生成することが出来ない
要するにマークスイープ系GCではDisposeのコンパイラによる自動生成が出来ないという大きなマイナスが有る
>「いつか」全員が所有権を手放したら「いつか」GCで破棄される
>どう違うというのか。
少なくとも最善が尽くされるという意味で違うし
同じデータと同じプログラムで有れば、常に同じタイミングで開放処理が走るという再現性が有る
それから、自分しか所有権を持っていない場合、つまり参照数が常に1というシンプルな状況ですら
参照カウンタ方式の方が開放処理が自動化されて楽
参照カウンタ方式で有れば、スマポを使っておけば済む
scoped_ptrでも良い
マークスイープ系GCであれば、自身しか所有権を持たない単純な場合でも
非常に面倒なことになる
自身にDisposeを実装して自身のメンバのDisposeを呼び出すコードを手動で書かなければならない
何故こういったコードをコンパイラが自動生成できず、手動で書かなければならないのかの根底に
まさにマークスイープGCの存在が有る
マークスイープ系GCは何処からも参照されなくなったことがその場ですぐに分からない
GCを発動してみるまで保証することが出来ない
自分のDisposeが呼び出された、まさにその瞬間に、自分のメンバに対してもDisposeしてよいのかどうなのか
参照数がリアルタイムで即座に分からないので判断する材料が何も無く
コンパイラはC++のデストラクタのように自動で芋づる式に開放処理を呼び出すコードを生成することが出来ない
要するにマークスイープ系GCではDisposeのコンパイラによる自動生成が出来ないという大きなマイナスが有る
441デフォルトの名無しさん
2016/03/27(日) 22:36:05.37ID:15KjVKPo >>438
しねーよ
しねーよ
442デフォルトの名無しさん
2016/03/27(日) 22:41:25.16ID:VNvh7E4d >>440
子要素をDisposeしていいかどうかもわからないってそりゃ設計サボってる以外のなんでもないだろう
ちゃんと設計してればいつ削除してよいかなんてわかるはずだろ
まともに設計もできないレガシーエンジニアは黙っててよ
設計に時間使わないとリソース云々以前に別のバグだらけになるぞ
子要素をDisposeしていいかどうかもわからないってそりゃ設計サボってる以外のなんでもないだろう
ちゃんと設計してればいつ削除してよいかなんてわかるはずだろ
まともに設計もできないレガシーエンジニアは黙っててよ
設計に時間使わないとリソース云々以前に別のバグだらけになるぞ
443デフォルトの名無しさん
2016/03/27(日) 23:42:37.04ID:Ng/EIIMI RAII信者は頭が悪いな
444デフォルトの名無しさん
2016/03/27(日) 23:59:39.99ID:15KjVKPo >>443
自分の頭を検証しな
自分の頭を検証しな
445デフォルトの名無しさん
2016/03/28(月) 00:10:58.97ID:h9yZCrPP メンバにDispose持たせる設計って大抵ダメだよね
446デフォルトの名無しさん
2016/03/28(月) 00:20:40.85ID:j/beyn8U >>440
前者(参照カウントGC)はRAIIができるが後者(マーク&スイープGC)ではできないというお前の
主張について言っているんだが?
「最善が尽くされる」からRAIIができて、尽くされないからRAIIができないとでも言うのだろうかw
>要するにマークスイープ系GCではDisposeのコンパイラによる自動生成が出来ないという大きなマイナスが有る
何度も例に挙げているC++/CLIでは、デストラクタを記述するとコンパイラによってDisposeが追加される。
そして、ローカルスコープに置いたオブジェクトに対してはスコープを抜ける際に自動的にdeleteが呼ばれる。
そこからdelete→Dispose→デストラクタと呼び出される。RAIIに必要なものは揃っているし、事実、可能だ。
もちろん、そのメモリ領域は別のタイミングでGCによって回収される。
ここまで説明しても理解できない低脳ならしょうがない。
やはりデストラクタとファイナライザの違いが理解できてないようだからそこから勉強しなおせ。
前者(参照カウントGC)はRAIIができるが後者(マーク&スイープGC)ではできないというお前の
主張について言っているんだが?
「最善が尽くされる」からRAIIができて、尽くされないからRAIIができないとでも言うのだろうかw
>要するにマークスイープ系GCではDisposeのコンパイラによる自動生成が出来ないという大きなマイナスが有る
何度も例に挙げているC++/CLIでは、デストラクタを記述するとコンパイラによってDisposeが追加される。
そして、ローカルスコープに置いたオブジェクトに対してはスコープを抜ける際に自動的にdeleteが呼ばれる。
そこからdelete→Dispose→デストラクタと呼び出される。RAIIに必要なものは揃っているし、事実、可能だ。
もちろん、そのメモリ領域は別のタイミングでGCによって回収される。
ここまで説明しても理解できない低脳ならしょうがない。
やはりデストラクタとファイナライザの違いが理解できてないようだからそこから勉強しなおせ。
447デフォルトの名無しさん
2016/03/28(月) 00:39:52.48ID:2h3yopdG {
std::shared_ptr<my_namespace::my_class> p(new my_namespace::my_class(...));
/* unko_code */
}
using(var obj = new MyClass(...)) {
/* GoodCode */
}
美しいという事はいい事だね
C#は書いてある事がシンタックス的にもセマンティック的にも明確だ
リソース管理はこうでなければならない
std::shared_ptr<my_namespace::my_class> p(new my_namespace::my_class(...));
/* unko_code */
}
using(var obj = new MyClass(...)) {
/* GoodCode */
}
美しいという事はいい事だね
C#は書いてある事がシンタックス的にもセマンティック的にも明確だ
リソース管理はこうでなければならない
448デフォルトの名無しさん
2016/03/28(月) 01:22:52.25ID:khgTmo3F >>447
C++にもusing使えやw いらない波括弧外せやw
C++にもusing使えやw いらない波括弧外せやw
449デフォルトの名無しさん
2016/03/28(月) 03:34:15.37ID:d3YBhLBG450デフォルトの名無しさん
2016/03/28(月) 03:36:11.96ID:d3YBhLBG schemeに何十年も前から存在するwith-xxxx 系を一般化した構文だね
451デフォルトの名無しさん
2016/03/29(火) 01:23:53.57ID:Qm5oX8hY アレを更にtypedefされたりされると
ワケワカランくなるよな
ワケワカランくなるよな
452デフォルトの名無しさん
2016/03/29(火) 01:50:13.51ID:40IzaG0J c++なら普通こうだな
{
my_class obj(...);
...
}
そういやc#でp.release()相当の事って簡単にできるの?
{
auto p(make_unique<my_class>(...));
...
}
nullって代入可能?
{
my_class obj(...);
...
}
そういやc#でp.release()相当の事って簡単にできるの?
{
auto p(make_unique<my_class>(...));
...
}
nullって代入可能?
453デフォルトの名無しさん
2016/04/04(月) 02:47:24.69ID:+1V6ohqL GCがあるのになぜJavaはメモリリークしまくるソフトウェアを量産するのか
454デフォルトの名無しさん
2016/04/04(月) 02:55:18.29ID:FhdBY7IF >>453
Javaだから
Javaだから
455デフォルトの名無しさん
2016/04/12(火) 23:15:42.48ID:ZWvwh7J9 Rust使えばいいのさ
456デフォルトの名無しさん
2016/04/13(水) 10:33:47.16ID:+hJ3fPVS >>455
会社にいるよな、そういうやつ
会社にいるよな、そういうやつ
457デフォルトの名無しさん
2016/04/13(水) 15:29:31.16ID:oOcEPJTu GC大好きっ子に聞きたいんだが
完璧な(理想的な)GCを搭載したメジャーな言語処理系って何があるの?
これで開発すればリークも管理も気にしないでOKってやつ
完璧な(理想的な)GCを搭載したメジャーな言語処理系って何があるの?
これで開発すればリークも管理も気にしないでOKってやつ
458デフォルトの名無しさん
2016/04/13(水) 16:22:35.14ID:s5MRiDQ8 無い
マークスイープ系GC → 循環参照OK、しかし即座に開放されない
参照カウンタGC → 即座に開放される、しかし循環参照NG
ということで、理想のGCは無い
全てのGCは何かを妥協している
それから、たとえGCを使ったとしても
要らなくなったオブジェクトの参照をいつまでも握っている奴が居たら解放されないから
リソースの管理をしなくてよいということは無い
あと、GCは基本的にメインメモリに対してしか有効に機能しないから
例えばファイルオブジェクトなんかは要らなくなったら即座にcloseするなりすべきで
リソース管理フリーというわけにはいかない
マークスイープ系GC → 循環参照OK、しかし即座に開放されない
参照カウンタGC → 即座に開放される、しかし循環参照NG
ということで、理想のGCは無い
全てのGCは何かを妥協している
それから、たとえGCを使ったとしても
要らなくなったオブジェクトの参照をいつまでも握っている奴が居たら解放されないから
リソースの管理をしなくてよいということは無い
あと、GCは基本的にメインメモリに対してしか有効に機能しないから
例えばファイルオブジェクトなんかは要らなくなったら即座にcloseするなりすべきで
リソース管理フリーというわけにはいかない
459デフォルトの名無しさん
2016/04/13(水) 16:54:16.68ID:s5MRiDQ8 つまりは、GCを使っていたとしても
君がオブジェクトを何処かに登録したなら
オブジェクトが要らなくなったら登録解除してあげないと
そのオブジェクトは解放されないのだ
これはちょうどmallocしたらfreeしましょうに似ていて
GCを使ったとしても全てのリソースの管理が自動になるわけではないということだね
究極的にはGCの利点は自分でfree/deleteをしなくても良いところにある
これはつまり、ダングリングポインタが発生しないということだ
君がオブジェクトを何処かに登録したなら
オブジェクトが要らなくなったら登録解除してあげないと
そのオブジェクトは解放されないのだ
これはちょうどmallocしたらfreeしましょうに似ていて
GCを使ったとしても全てのリソースの管理が自動になるわけではないということだね
究極的にはGCの利点は自分でfree/deleteをしなくても良いところにある
これはつまり、ダングリングポインタが発生しないということだ
460デフォルトの名無しさん
2016/04/14(木) 20:54:37.84ID:f1hhftJp >>457
C+BoehmGC
C+BoehmGC
461デフォルトの名無しさん
2016/04/17(日) 16:17:55.58ID:j/f/oFPY そして無視されてしまうコピーGC君
GCの利点は自分で大量にメモリの確保&解放するプログラムにおいてバグが出にくくスループットも出るってところだと思う
もしheapをそんなに頻繁に確保&解放しないんだったらGCない言語の方がいい
ただ近代的な言語は少数の例外を除いて大抵GC積んでるけど
GCの利点は自分で大量にメモリの確保&解放するプログラムにおいてバグが出にくくスループットも出るってところだと思う
もしheapをそんなに頻繁に確保&解放しないんだったらGCない言語の方がいい
ただ近代的な言語は少数の例外を除いて大抵GC積んでるけど
462デフォルトの名無しさん
2016/04/17(日) 16:21:44.96ID:j/f/oFPY >リソース管理フリーというわけにはいかない
リソース管理フリーについてはrustみたいなGCない言語のほうが達成できてるよね(あとは関数型言語か)
でもrustでもリソースの解放時にエラーを吐く可能性がある処理なら自分で解放する処理書かなきゃいけないっぽいけど
リソース管理フリーについてはrustみたいなGCない言語のほうが達成できてるよね(あとは関数型言語か)
でもrustでもリソースの解放時にエラーを吐く可能性がある処理なら自分で解放する処理書かなきゃいけないっぽいけど
463デフォルトの名無しさん
2016/04/17(日) 18:35:17.89ID:SAR9JCaP RAIIでも結局どのタイミングで解放されるか意識しなくてもいいってわけじゃないし
リソース解放処理を書かなくていいだけで
リソース解放処理を書かなくていいだけで
464デフォルトの名無しさん
2016/04/17(日) 18:43:59.82ID:cFoKw8Zx メモリ管理系のバグが顕在化しにくいだけで、そこら辺適当なまま中途半端にキャリアを積む開発者を量産するという害悪が大きい。
JNIやらで他のAPI使う必要が出てくると結局いろいろ配慮しなきゃいけなくなるし。
JNIやらで他のAPI使う必要が出てくると結局いろいろ配慮しなきゃいけなくなるし。
465デフォルトの名無しさん
2016/04/17(日) 19:43:44.44ID:oNE1M7I6 >>460
コンサバじゃ完璧にほど遠いぞな
コンサバじゃ完璧にほど遠いぞな
466デフォルトの名無しさん
2016/04/17(日) 19:50:47.36ID:1R/4ebGS >メモリ管理系のバグが顕在化しにくいだけ
結局これだよね
本当に丸投げできるなら乗っかるのもいいと思う
性能問題はハードの進化で一部の用途を除けば問題無くなると思うし
でも現実は中途半端だから意識して書いたほうがマシだと
結局これだよね
本当に丸投げできるなら乗っかるのもいいと思う
性能問題はハードの進化で一部の用途を除けば問題無くなると思うし
でも現実は中途半端だから意識して書いたほうがマシだと
467デフォルトの名無しさん
2016/04/17(日) 21:19:09.59ID:IB74e9ph ムーブセマンティクスのおかげでずいぶん便利に。
468デフォルトの名無しさん
2016/04/17(日) 23:09:38.99ID:j/f/oFPY あと正確にはGCには含まれないけどメモリコンパクションをやってくれる処理系が多いのも
GCを使う利点になるかも
GCを使う利点になるかも
469デフォルトの名無しさん
2016/04/17(日) 23:17:23.70ID:cFoKw8Zx 今どき意図的にやらない限りメモリフラグメンテーションで困るような場面があるか?
アドレス空間も余裕出てきたし、多少おかしな確保パターンで浪費してもGCほど実メモリを食わないし。
今どき主流のサイズ毎に空きを管理するmallocは優秀だしね。
これがダメならlinuxカーネルとか先に落ちちゃうぞ。
アドレス空間も余裕出てきたし、多少おかしな確保パターンで浪費してもGCほど実メモリを食わないし。
今どき主流のサイズ毎に空きを管理するmallocは優秀だしね。
これがダメならlinuxカーネルとか先に落ちちゃうぞ。
470デフォルトの名無しさん
2016/04/18(月) 15:56:44.18ID:kcE0qDSU471デフォルトの名無しさん
2016/04/18(月) 16:30:17.23ID:BDPQ12Es 自前のメモリ管理が超下手くそなだけやろ
修業して出直してこいや
修業して出直してこいや
472デフォルトの名無しさん
2016/04/18(月) 16:37:09.21ID:OvHIqTOi 自慢になってないような
473デフォルトの名無しさん
2016/04/18(月) 16:44:52.62ID:9yQABY6F ゲームだとフラグメント問題になること多いよ
ゲーム専用機なら特に
最近は特にオープンワールドが当たり前になってるけど
あれストリーミングでどんどんメモリ置き換えていくしね
ゲーム専用機なら特に
最近は特にオープンワールドが当たり前になってるけど
あれストリーミングでどんどんメモリ置き換えていくしね
474デフォルトの名無しさん
2016/04/18(月) 16:47:31.98ID:/wa5LIjH jemallocのようなモダンなmalloc実装使えば良かったのでは。
475デフォルトの名無しさん
2016/04/18(月) 17:47:00.91ID:IBBVu28x ゲーム専用機でフラグメンテーションおこすとか開発者としての適性を疑われても不思議ではない。
オブジェクトの寿命管理すらしないのか?
オブジェクトの寿命管理すらしないのか?
476デフォルトの名無しさん
2016/04/18(月) 18:51:08.61ID:RPQ9NKJO メモリのフラグメンテーションをC/C++でコントロールする方法ってあるの?
mallocの実装頼りじゃなく。
mallocの実装頼りじゃなく。
477デフォルトの名無しさん
2016/04/18(月) 19:05:27.63ID:OvHIqTOi mallocの挙動がわかってれば、ある程度は・・・・
478デフォルトの名無しさん
2016/04/18(月) 19:14:30.71ID:OvHIqTOi 細かくメモリ要求するから、下回りで時間がかかる
メモリ分断されてもオンメモリでの検索はさほど時間がかからない
(空きができても、そこに入らないときに)
メモリ分断されてもオンメモリでの検索はさほど時間がかからない
(空きができても、そこに入らないときに)
479デフォルトの名無しさん
2016/04/18(月) 19:15:14.97ID:9yQABY6F480デフォルトの名無しさん
2016/04/18(月) 19:21:39.69ID:IBBVu28x 寿命管理で解決できないとか、フラグメンテーションがどういう現象か分かっているの?
汎用の寿命管理APIみたいなのを使うとか言うのと勘違いでもしている?
汎用の寿命管理APIみたいなのを使うとか言うのと勘違いでもしている?
481デフォルトの名無しさん
2016/04/18(月) 20:02:22.75ID:3yZKjOEp >>480
おいおい・・
この場合寿命を管理できないってのはgiven conditionとして考えないと
そりゃ寿命があらかじめわかってるなら苦労しないっての
大規模なプログラムでそんな恵まれた状況は例外的だよ
おいおい・・
この場合寿命を管理できないってのはgiven conditionとして考えないと
そりゃ寿命があらかじめわかってるなら苦労しないっての
大規模なプログラムでそんな恵まれた状況は例外的だよ
482デフォルトの名無しさん
2016/04/18(月) 20:57:42.92ID:IBBVu28x 専用ゲーム機上のゲームだよ。
リソースが逼迫したら何を優先するかの戦略も含めてほぼ理想的なgiven conditionだろうに。
ユーザーの行動による不確定性も全てコントロール下にあるだろうに。
リソースが逼迫したら何を優先するかの戦略も含めてほぼ理想的なgiven conditionだろうに。
ユーザーの行動による不確定性も全てコントロール下にあるだろうに。
483デフォルトの名無しさん
2016/04/18(月) 21:13:59.16ID:RPQ9NKJO >>482 専用ゲーム機と普通のPCの1アプリケーションとで何が違うのか。mallocも使わないってこと?
NoGC, 各GCでメモリ空間がどう使われるかを視覚化
ttps://spin.atomicobject.com/2014/09/03/visualizing-garbage-collection-algorithms/
黒: 未使用
灰: 確保
緑: 読み込み
黄: 書き込み
赤: GC用のアクセス(参照カウンタ、マーク用ビットetc)
緑と黄は時間経過で退色していく
メモリフラグメンテーションという観点から見ると、コピー型GCが綺麗。
NoGC, 各GCでメモリ空間がどう使われるかを視覚化
ttps://spin.atomicobject.com/2014/09/03/visualizing-garbage-collection-algorithms/
黒: 未使用
灰: 確保
緑: 読み込み
黄: 書き込み
赤: GC用のアクセス(参照カウンタ、マーク用ビットetc)
緑と黄は時間経過で退色していく
メモリフラグメンテーションという観点から見ると、コピー型GCが綺麗。
484デフォルトの名無しさん
2016/04/18(月) 21:15:59.31ID:3yZKjOEp まぁテトリスとかならその程度の理解でいいんじゃない?w
485デフォルトの名無しさん
2016/04/18(月) 21:33:24.92ID:kcE0qDSU Javaの寿命管理APIは最強ですな。
486デフォルトの名無しさん
2016/04/18(月) 21:49:39.41ID:9yQABY6F487デフォルトの名無しさん
2016/04/18(月) 21:56:15.95ID:IBBVu28x 普通のmallocで足りるならそれでもいいけど。
基本メモリ容量ギリギリまで使うから、最初に描画、ゲーム内部状態、音声、ディスクキャッシュなどでどのくらい使うか決めておく。
終始一貫して静的に決めるのが楽だけど、場合によっては場面ごとに配分を切り替えたりする。
で、例えば広いマップ上を自由に動き回るようなゲームだと、マップを複数のパーツに分割して、詳細モデルから簡易モデルまで用意する。
基本メモリ容量ギリギリまで使うから、最初に描画、ゲーム内部状態、音声、ディスクキャッシュなどでどのくらい使うか決めておく。
終始一貫して静的に決めるのが楽だけど、場合によっては場面ごとに配分を切り替えたりする。
で、例えば広いマップ上を自由に動き回るようなゲームだと、マップを複数のパーツに分割して、詳細モデルから簡易モデルまで用意する。
488デフォルトの名無しさん
2016/04/18(月) 22:12:01.61ID:3yZKjOEp ゲームプログラムとかならメモリ確保は直接システムコール呼び出して
ページ単位でアロケートするのが定石
必要ならmspaceとかインスタンスベースのヒープを自分で作る
ページ単位でアロケートするのが定石
必要ならmspaceとかインスタンスベースのヒープを自分で作る
489デフォルトの名無しさん
2016/04/19(火) 01:49:46.30ID:KVIhh3Hm 使用できるメモリのサイズも空きメモリのサイズも最初から分かってて、ユーザーからの入力も限られてて、
そいつら全部自分で管理できる「恵まれた」環境でしか通用しないアプローチだよなそれ。
そいつら全部自分で管理できる「恵まれた」環境でしか通用しないアプローチだよなそれ。
490デフォルトの名無しさん
2016/04/19(火) 01:58:46.65ID:fq3yh1do レーシングゲームは出てくる車が決まっていてコースも決まっているから。
491デフォルトの名無しさん
2016/04/19(火) 08:28:57.71ID:YcewE61x 昨今はレースゲームでも汎用的なゲームエンジン使うことが多いから
その場合事前に寿命が決まってる前提の作りにはしていないと思うぞ
GDCとかGame Gemとかでも昔からフラグメンテーション対策を含む
メモリ管理の手法はいろいろ議論されているから調べてみるとよろし
その場合事前に寿命が決まってる前提の作りにはしていないと思うぞ
GDCとかGame Gemとかでも昔からフラグメンテーション対策を含む
メモリ管理の手法はいろいろ議論されているから調べてみるとよろし
492デフォルトの名無しさん
2016/04/20(水) 12:56:58.01ID:r07pzD8i493デフォルトの名無しさん
2016/04/20(水) 13:09:41.53ID:DLw9rf+F494デフォルトの名無しさん
2016/04/20(水) 19:22:46.02ID:bj66dBvK >>493
フラグメンテーションの話だっての
フラグメンテーションの話だっての
495デフォルトの名無しさん
2016/04/20(水) 19:58:58.01ID:CuR1I1mj やり手のゲーム系の方たちに、逆らうようなことは・・・・
496デフォルトの名無しさん
2016/04/21(木) 01:20:25.83ID:jf1w54Av497デフォルトの名無しさん
2016/04/21(木) 02:16:29.96ID:G+xv7xqn >>496
どうとでもなるって?
へーじゃあ試させてもらうわ
GDC 2016でもこういう講演があった
http://schedule.gdconf.com/session/building-a-low-fragmentation-memory-system-for-64-bit-games
64bitならなぜフラグメンテーションが軽減できるか説明してもらおうか?
物理メモリが多いからじゃないからな
あればあるだけメモリ使うのがゲームなのでメモリに余裕があるわけじゃない
どうとでもなるって?
へーじゃあ試させてもらうわ
GDC 2016でもこういう講演があった
http://schedule.gdconf.com/session/building-a-low-fragmentation-memory-system-for-64-bit-games
64bitならなぜフラグメンテーションが軽減できるか説明してもらおうか?
物理メモリが多いからじゃないからな
あればあるだけメモリ使うのがゲームなのでメモリに余裕があるわけじゃない
498デフォルトの名無しさん
2016/04/21(木) 11:32:02.27ID:EjzxVVPK ゲーム機含む組み込み系は結果が不確定な動的メモリー確保なんかしないのが鉄板(しようとする奴は未熟な馬鹿)だったが
PCと合わせて組み込み機器もスペックが潤沢になって富豪的プログラムが一般的になってきたからね
無知ゆえ聞きたいんだが
最近のゲームソフトやら>>497やらってどういうGC使ってるの?
PCと合わせて組み込み機器もスペックが潤沢になって富豪的プログラムが一般的になってきたからね
無知ゆえ聞きたいんだが
最近のゲームソフトやら>>497やらってどういうGC使ってるの?
499デフォルトの名無しさん
2016/04/21(木) 13:09:31.92ID:pog3nPgL ゲームだって組込みだって今どき動的メモリー確保しないなんて化石みたいな発想が通るわけないだろ
かといって普通のGCは問題外
賢いメモリアロケーションをするしかないんだよ
>>497は「こんなすごい講演するぞ」って言う宣伝だけだけど中身はどこにあるの?
かといって普通のGCは問題外
賢いメモリアロケーションをするしかないんだよ
>>497は「こんなすごい講演するぞ」って言う宣伝だけだけど中身はどこにあるの?
500デフォルトの名無しさん
2016/04/21(木) 16:14:15.43ID:lEi5GQja >>497
MMUが付いているから
物理メモリがフラグメンテーションすることは、ある程度これで防げる
しかもハードウェアの機能だから高速だし、勝手にやってくれるから素晴らしい
速度が重要なゲームでは、これは有り難い
ソフト的なアプローチでこれ以上の細工は遅くなるだけで効果が薄い
問題は論理アドレスの方
32bit空間だと例え物理メモリが余っていても
論理アドレスがフラグメンテーションを起こして連続したメモリを確保できなくなる
物理アドレスが枯渇するよりもさきに、そちらの方が問題になることが多い
64bitだと、これが防げる
MMUが付いているから
物理メモリがフラグメンテーションすることは、ある程度これで防げる
しかもハードウェアの機能だから高速だし、勝手にやってくれるから素晴らしい
速度が重要なゲームでは、これは有り難い
ソフト的なアプローチでこれ以上の細工は遅くなるだけで効果が薄い
問題は論理アドレスの方
32bit空間だと例え物理メモリが余っていても
論理アドレスがフラグメンテーションを起こして連続したメモリを確保できなくなる
物理アドレスが枯渇するよりもさきに、そちらの方が問題になることが多い
64bitだと、これが防げる
501デフォルトの名無しさん
2016/04/21(木) 16:37:13.61ID:lEi5GQja 各ゲーム機の事情は知らないが
PCで有れば、64bitプロセスは、論理アドレスの空間が256TB(48bit)もある
ゲーム機も似たようなものだろう
256TBもの物理メモリを積んだPCやゲーム機は存在していないし
例え論理アドレスが激しくラグメンテーションを起こしても
256TBもの論理アドレス空間を使い切るという事態は考えなくてよい
つまり、64bitプロセスなら、論理アドレスの心配はしなくてよい
一方で、物理アドレスのフラグメンテーションはMMUに任せておけばよい
これはハードウェアで自動で行われるし、とても高速
その余計にソフトウェア的アプローチで頑張ってみたところで
多少物理メモリのフラグメンテーションは改善されるかもしれないが
徒労というかなんというか、労力に見合わないし
しかも遅くなるのでゲームには向いていないし、やらなくてよい
物理アドレスは自分だけが使っているわけではなく、OSを含めたほかのプロセスも使っているので
自分のプロセスが使っている物理メモリだけフラグメンテーションを解消しようと
コンパクションするのも何か完璧感が無いし
自分のプロセス内だけで考えても、外部ライブラリやXBoxならDirectXが使用している物理メモリの
フラグメンテーションは手が出せないので解消しようがない、やはりやるだけ徒労
自分の管理出来る部分だけ物理メモリのコンパクションをかけても
「これで計算上、必ずあと200MBの物理メモリを使用できる筈」とかといった保証はどこにもない
理由は、外部のライブラリ内での物理メモリの使用状況が分からないし、手が出せないから
とにかく徒労であり、MMUに任せておけばよい
PCで有れば、64bitプロセスは、論理アドレスの空間が256TB(48bit)もある
ゲーム機も似たようなものだろう
256TBもの物理メモリを積んだPCやゲーム機は存在していないし
例え論理アドレスが激しくラグメンテーションを起こしても
256TBもの論理アドレス空間を使い切るという事態は考えなくてよい
つまり、64bitプロセスなら、論理アドレスの心配はしなくてよい
一方で、物理アドレスのフラグメンテーションはMMUに任せておけばよい
これはハードウェアで自動で行われるし、とても高速
その余計にソフトウェア的アプローチで頑張ってみたところで
多少物理メモリのフラグメンテーションは改善されるかもしれないが
徒労というかなんというか、労力に見合わないし
しかも遅くなるのでゲームには向いていないし、やらなくてよい
物理アドレスは自分だけが使っているわけではなく、OSを含めたほかのプロセスも使っているので
自分のプロセスが使っている物理メモリだけフラグメンテーションを解消しようと
コンパクションするのも何か完璧感が無いし
自分のプロセス内だけで考えても、外部ライブラリやXBoxならDirectXが使用している物理メモリの
フラグメンテーションは手が出せないので解消しようがない、やはりやるだけ徒労
自分の管理出来る部分だけ物理メモリのコンパクションをかけても
「これで計算上、必ずあと200MBの物理メモリを使用できる筈」とかといった保証はどこにもない
理由は、外部のライブラリ内での物理メモリの使用状況が分からないし、手が出せないから
とにかく徒労であり、MMUに任せておけばよい
502デフォルトの名無しさん
2016/04/21(木) 17:22:28.74ID:7dcTEyv0 ただの物理メモリ不足の話がなんでと思ってしまった
swapはじまったら、fpsなゲームはどうなるんでしょうね
swapはじまったら、fpsなゲームはどうなるんでしょうね
503デフォルトの名無しさん
2016/04/21(木) 19:18:25.46ID:zEEe/DNn 論理アドレスが64bitだったらフラグメンテーション対策なんていらんということ?いや自分もそうは思うんだが。
上の方で「専用ゲーム機開発ならフラグメンテーション対策も行うのが常識!」みたいに主張してる人がいて、
それって自作のmalloc相当のアロケータ作るってことだよね?と思ったんだが、
メモリ節約術とごっちゃにしてる人もいてわけが分からなくなってきた。
上の方で「専用ゲーム機開発ならフラグメンテーション対策も行うのが常識!」みたいに主張してる人がいて、
それって自作のmalloc相当のアロケータ作るってことだよね?と思ったんだが、
メモリ節約術とごっちゃにしてる人もいてわけが分からなくなってきた。
504デフォルトの名無しさん
2016/04/21(木) 22:14:27.41ID:WHT47icf なんで馬鹿に限って長文書きたがるんだろうか
505デフォルトの名無しさん
2016/04/22(金) 08:58:47.78ID:imh5rD9T506デフォルトの名無しさん
2016/04/22(金) 11:30:03.69ID:+Z1ZyILi わかってなさそうな方がそれっぽいこと・・・・
507デフォルトの名無しさん
2016/04/22(金) 12:23:02.13ID:UzNl+aCx わかってる方は完結に書いてみればいい
508デフォルトの名無しさん
2016/04/22(金) 15:49:44.48ID:+Z1ZyILi 学校の先生にそう教わったんですね
509デフォルトの名無しさん
2016/04/22(金) 19:23:46.16ID:cAq2nbH2 用途ごとにセグメント分けて使い回すのが無難じゃないの
オブジェクトの数が足りなくなったら透明でいいのよ
オブジェクトの数が足りなくなったら透明でいいのよ
510デフォルトの名無しさん
2016/04/22(金) 20:32:21.23ID:1FeuO5Gj 結局のところ、物理アドレスのフラグメンテーションはMMUが勝手になんとかしてくれるからあまり問題にならない
しかし論理アドレスの方は何にもしてくれないのでフラグメンテーション起こして
連続したアドレスが確保出来なくなると、それで終わり、どうしようもない
32bitプロセスだと4GBしか空間がないから、まれに問題になる
64bitプロセスだと無尽蔵に空間があるから問題になることは現状ありえない
しかし論理アドレスの方は何にもしてくれないのでフラグメンテーション起こして
連続したアドレスが確保出来なくなると、それで終わり、どうしようもない
32bitプロセスだと4GBしか空間がないから、まれに問題になる
64bitプロセスだと無尽蔵に空間があるから問題になることは現状ありえない
511デフォルトの名無しさん
2016/04/22(金) 23:54:45.31ID:imh5rD9T >>510
> 結局のところ、物理アドレスのフラグメンテーションはMMUが勝手になんとかしてくれるからあまり問題にならない
MMUってのはアドレス変換するハードウェア
勝手に物理メモリを仮想メモリにマップしたりはしない
それをやるのはOS
> 結局のところ、物理アドレスのフラグメンテーションはMMUが勝手になんとかしてくれるからあまり問題にならない
MMUってのはアドレス変換するハードウェア
勝手に物理メモリを仮想メモリにマップしたりはしない
それをやるのはOS
512デフォルトの名無しさん
2016/04/23(土) 00:19:34.35ID:43LRl8T1 そもそも、ページサイズより粒度が細かいフラグメンテーションにはMMUはなんの効果もないしな。
513デフォルトの名無しさん
2016/04/23(土) 05:06:22.41ID:TwuNXQH0 autorelease()呼んだらコアダンプ糞osがwww
514デフォルトの名無しさん
2016/04/23(土) 18:49:46.90ID:RPK9BpXO 小さな粒度のフラグメンテーションは気にする必要ない
4KBならUTF-16で2000文字ぐらいしかない
32bitビットマップなら32x32ほとのサイズ
4KBならUTF-16で2000文字ぐらいしかない
32bitビットマップなら32x32ほとのサイズ
515デフォルトの名無しさん
2016/04/23(土) 20:33:25.39ID:PodTlhvX キャッシュヒット率が落ちそう(コナミ)
516デフォルトの名無しさん
2016/04/24(日) 01:18:30.93ID:9YSuZOIq517デフォルトの名無しさん
2016/04/24(日) 01:38:34.87ID:ai61/62A518デフォルトの名無しさん
2016/04/24(日) 08:38:51.73ID:65va2BTL メモリー512バイトでどうやってヒープを使えと。
519デフォルトの名無しさん
2016/04/24(日) 09:31:32.99ID:HSA/nLEW ネイティブコードが必要な場面で中途半端に GC に頼るのが問題なのかもしれないが、もうネイティブコードが必要な戦場は限られた一部だけになってて、主戦場では GC は大前提の技術なんだから必要ないとか言われましてもですわ。
520デフォルトの名無しさん
2016/04/24(日) 10:14:15.47ID:W23a3TIA ページがスカスカになっても大丈夫
1ページ4KBとかだからね、十分小さい
32x32-32bitビットマップより小さい
最近のゲームで使われるような大きなサイズのテクスチャなど
でかいサイズを確保する場合はどうせ新しいページが割り当てられるし
小さなサイズを確保する場合は、スカスカになったページから空いているところを探して割り当てられるので
問題ない
1ページ4KBとかだからね、十分小さい
32x32-32bitビットマップより小さい
最近のゲームで使われるような大きなサイズのテクスチャなど
でかいサイズを確保する場合はどうせ新しいページが割り当てられるし
小さなサイズを確保する場合は、スカスカになったページから空いているところを探して割り当てられるので
問題ない
521デフォルトの名無しさん
2016/04/24(日) 10:14:59.78ID:TFb7efu7 androidしか知りませんみたいな事言われてもな
522デフォルトの名無しさん
2016/04/24(日) 10:27:10.54ID:W23a3TIA 物理アドレスはページサイズで切り売りされるので
元から連続しているアドレスは必要ではなく
フラグメンテーションは問題にならない
連続したアドレスが必要になるのは論理アドレスのほうであり
32bitプロセスでは4GBしか空間がないから問題になることがある
64bitプロセスであれば現状問題にならない
元から連続しているアドレスは必要ではなく
フラグメンテーションは問題にならない
連続したアドレスが必要になるのは論理アドレスのほうであり
32bitプロセスでは4GBしか空間がないから問題になることがある
64bitプロセスであれば現状問題にならない
523デフォルトの名無しさん
2016/04/24(日) 10:37:41.02ID:65va2BTL 実はQtでデーモン作って動かしてるのだが、もう半年以上動き続けてる。
まさかこんなに問題が起きないとは。
案ずるより産むがやすしですぞ皆の衆。
まさかこんなに問題が起きないとは。
案ずるより産むがやすしですぞ皆の衆。
524デフォルトの名無しさん
2016/04/24(日) 10:58:37.83ID:65va2BTL Qtで作ったのは一日ででっち上げる為だったのだが、意外なことに堅牢に動き続けてる。
525デフォルトの名無しさん
2016/04/24(日) 12:08:49.17ID:HSA/nLEW Qt でデーモン?
GUI が必要なデーモン?
GUI が必要なデーモン?
526デフォルトの名無しさん
2016/04/24(日) 12:13:06.27ID:ynYywbEh >>525
デーモンは通常フォアグラウンドじゃないのでUIを持ちませんぜ旦那。
デーモンは通常フォアグラウンドじゃないのでUIを持ちませんぜ旦那。
527デフォルトの名無しさん
2016/04/24(日) 12:25:33.24ID:HSA/nLEW ならば何に何故どのように Qt を使うのだ?
528デフォルトの名無しさん
2016/04/24(日) 12:45:58.38ID:TFb7efu7529デフォルトの名無しさん
2016/04/24(日) 13:02:46.55ID:ynYywbEh 等と意味不明な供述をしており。
530デフォルトの名無しさん
2016/04/24(日) 14:52:01.10ID:fu8W/E1c531デフォルトの名無しさん
2016/04/24(日) 14:52:56.88ID:UKiBgwvV daemonじゃなくてdemonなんじゃない?
デスクトップマスコット的な
デスクトップマスコット的な
532デフォルトの名無しさん
2016/04/24(日) 14:59:36.53ID:ynYywbEh 俺が作ったのはウェブソケットによってサービスを提供するプログラムだ。
エンジンエックスをリバースプロキシとした。
このプログラムは常時数千の接続から大量のリクエストを受け付ける。
接続してくるクライアントは専用に作られQtで書かれている。
大量のリクエストはそれぞれ複数のデータベース検索を引き起こす。
こう書くと結構負荷が高そうなのだが、さすがC++、ほとんど塵程度の負荷しかなく、
当然のことながらリプライに遅延もない。
そこで案ずるよりも生むが易しというわけ。
Qtは出自からしてGUIのためのライブラリではあるのだが、GUIが無いと使えないというわけでもない。
むしろボリュームからすれば、GUI以外の方がより大きい。
そして、半年動きっぱなしで大丈夫ことからして、実は断片化は気にしなくても
良さそうだ。
エンジンエックスをリバースプロキシとした。
このプログラムは常時数千の接続から大量のリクエストを受け付ける。
接続してくるクライアントは専用に作られQtで書かれている。
大量のリクエストはそれぞれ複数のデータベース検索を引き起こす。
こう書くと結構負荷が高そうなのだが、さすがC++、ほとんど塵程度の負荷しかなく、
当然のことながらリプライに遅延もない。
そこで案ずるよりも生むが易しというわけ。
Qtは出自からしてGUIのためのライブラリではあるのだが、GUIが無いと使えないというわけでもない。
むしろボリュームからすれば、GUI以外の方がより大きい。
そして、半年動きっぱなしで大丈夫ことからして、実は断片化は気にしなくても
良さそうだ。
533デフォルトの名無しさん
2016/04/24(日) 15:05:02.69ID:ynYywbEh ちなみにQt使ってなかったら一日でサービスを書き上げることは不可能だっただろう。
Qtは、その他のGUIライブラリ同様バグが多いのだが、GUIを抜いてみるとどうだろう、
意外なほどに堅牢なのだ。
何しろもう半年動きっぱなし。
俺はこの経験から一つの予測を立てた。
これからのサービスは、C++で書かれるようになる可能性がある。
何しろ圧倒的に速い。
一つのリクエストに対するレスポンスが速いため、平均負荷率が圧倒的に下がるのだ。
この事実に世の中が気づくにはそう時間がかからないはず。
そしてsystemdがこの動きを促進するはず。
ちなみにWindowsで書いてLinuxで動かしてます。
Qtは、その他のGUIライブラリ同様バグが多いのだが、GUIを抜いてみるとどうだろう、
意外なほどに堅牢なのだ。
何しろもう半年動きっぱなし。
俺はこの経験から一つの予測を立てた。
これからのサービスは、C++で書かれるようになる可能性がある。
何しろ圧倒的に速い。
一つのリクエストに対するレスポンスが速いため、平均負荷率が圧倒的に下がるのだ。
この事実に世の中が気づくにはそう時間がかからないはず。
そしてsystemdがこの動きを促進するはず。
ちなみにWindowsで書いてLinuxで動かしてます。
534デフォルトの名無しさん
2016/04/24(日) 15:05:44.58ID:ai61/62A 一例をもって一般化はできないだろ
535デフォルトの名無しさん
2016/04/24(日) 15:05:53.54ID:TFb7efu7536デフォルトの名無しさん
2016/04/24(日) 15:08:01.90ID:ynYywbEh Windowsで書いてLinuxで動かすことに、systemdは大いに貢献した。
従来のデーモンの作り方では、いろいろ煩雑なことがありすぎ、時間の制限から難しかっただろう。
Qt+systemd、この直観的な選択は大成功であった。
従来のデーモンの作り方では、いろいろ煩雑なことがありすぎ、時間の制限から難しかっただろう。
Qt+systemd、この直観的な選択は大成功であった。
537デフォルトの名無しさん
2016/04/24(日) 15:11:43.89ID:ynYywbEh Qtのバグの多くは、複数の環境に対応するため、その差異によって引き起こされているという結論を得た。
systemd万歳!
systemd万歳!
538デフォルトの名無しさん
2016/04/24(日) 15:16:24.95ID:ynYywbEh 更にもう一つヒントがある。
複数のクライアントから多様なリクエストがあるとはいえ、一つのプログラムが擁する
データ構造などたかが知れているのだ。
クライアントAのリクエストにこたえるため使用された記憶空間は、解放されたのち
クライアントBのためにそのまま使われる可能性があるのだ。
そういったわけで断片化は気にする必要が無い。
若者よ、案ずるより産むが易しですぞ。
複数のクライアントから多様なリクエストがあるとはいえ、一つのプログラムが擁する
データ構造などたかが知れているのだ。
クライアントAのリクエストにこたえるため使用された記憶空間は、解放されたのち
クライアントBのためにそのまま使われる可能性があるのだ。
そういったわけで断片化は気にする必要が無い。
若者よ、案ずるより産むが易しですぞ。
539デフォルトの名無しさん
2016/04/24(日) 15:28:56.74ID:u6qUQj/U ねえ訳分かんないんだけど
本人以外で理解してる人要るの?
本人以外で理解してる人要るの?
540デフォルトの名無しさん
2016/04/24(日) 15:55:24.75ID:fu8W/E1c むやみに連投してる奴はたいていスルーでok
541デフォルトの名無しさん
2016/04/24(日) 20:02:15.39ID:ynYywbEh むしろ、わからないのに何故、一生懸命主張していたのかと。
542デフォルトの名無しさん
2016/04/24(日) 20:22:44.80ID:fcfJojCV 誰と戦っているんだろう…
543デフォルトの名無しさん
2016/04/24(日) 22:39:17.85ID:WrdDgWl7 マークスイープでメモリリークってどうやって起きるんだ?
初心者だから優しく説明してほしい
初心者だから優しく説明してほしい
544デフォルトの名無しさん
2016/04/25(月) 01:16:56.77ID:/Pmm49fe 狭義の意味では起きない
もし君が気付かない間にオブジェクトへの参照を保持していたらどんなGCだろうが解放されない
それをリークというならリークする
もし君が気付かない間にオブジェクトへの参照を保持していたらどんなGCだろうが解放されない
それをリークというならリークする
545デフォルトの名無しさん
2016/04/25(月) 13:44:57.25ID:HSarKqaj 言い換えればダングリングポインタが発生しない
それだけ
それだけ
546デフォルトの名無しさん
2016/04/25(月) 14:51:13.10ID:0xpbBk2N マーク&スイープでもポインタの型情報を記録してないとリークしまくる
無関係な数値をアドレス参照と勘違いしてマーク→未開放
某言語ではこのために巨大なメモリブロックが開放されない
無関係な数値をアドレス参照と勘違いしてマーク→未開放
某言語ではこのために巨大なメモリブロックが開放されない
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 そうなん?
ガベコレの回収効率が悪くなって
無駄な使用領域が増えて枯渇しやすくなるんじゃね
ガベコレの回収効率が悪くなって
無駄な使用領域が増えて枯渇しやすくなるんじゃね
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は
大きなサイズを確保するときと
小さなサイズを確保するときで
アルゴリズムが切り替わる
大きなサイズを確保するときと
小さなサイズを確保するときで
アルゴリズムが切り替わる
671デフォルトの名無しさん
2017/09/17(日) 16:17:08.43ID:iyMogwhx VC++2015での実行結果
auto a = malloc( 10 );
auto b = malloc( 10 );
wchar_t tmp[ 100 ];
::swprintf_s( tmp, 100, L"a = %x, b = %x \n", a, b );
::OutputDebugString( tmp );
----------------------------------------
a = 10a4f0, b = 10a508
残念でしたね
auto a = malloc( 10 );
auto b = malloc( 10 );
wchar_t tmp[ 100 ];
::swprintf_s( tmp, 100, L"a = %x, b = %x \n", a, b );
::OutputDebugString( tmp );
----------------------------------------
a = 10a4f0, b = 10a508
残念でしたね
672デフォルトの名無しさん
2017/09/17(日) 16:17:49.54ID:S40DCpdn MMUは多少以上の処理をすると簡単にフォールト返すのが困りもの
結局初心者レベルのプログラマしか想定してないんだよな
結局初心者レベルのプログラマしか想定してないんだよな
673デフォルトの名無しさん
2017/09/17(日) 16:30:36.71ID:S40DCpdn >>671
realloc使った事ある?
realloc使った事ある?
674デフォルトの名無しさん
2017/09/17(日) 16:34:30.81ID:iyMogwhx お前が残念なことと何の関係が?
あほらし
あほらし
675デフォルトの名無しさん
2017/09/17(日) 16:37:39.46ID:S40DCpdn 複雑なことをしていると、それがまるで正しいかのように思う点がアフォ
多少複雑なことをしていてもアフォな挙動をする可能性はあると考えるべき
多少複雑なことをしていてもアフォな挙動をする可能性はあると考えるべき
676デフォルトの名無しさん
2017/09/17(日) 17:05:23.31ID:S40DCpdn malloc,newの挙動の説明ってまんまMMUの説明なんだよな
だから複雑なアルゴリズムを使われていると思うのはMMUが複雑な挙動をしているから
でも、そんなに複雑な挙動してるか??
単に過去のアプリとの互換性の問題で変な事をしているだけだぞ
だから複雑なアルゴリズムを使われていると思うのはMMUが複雑な挙動をしているから
でも、そんなに複雑な挙動してるか??
単に過去のアプリとの互換性の問題で変な事をしているだけだぞ
677デフォルトの名無しさん
2017/09/17(日) 17:16:19.17ID:S40DCpdn たいがいのmalloc,newはMMU次第でいくらでも挙動が変化するからな
ちゃんとPC毎に動作確認したか??
ちゃんとPC毎に動作確認したか??
678デフォルトの名無しさん
2017/09/17(日) 17:44:23.50ID:4FsrO7aF ID:S40DCpdn しったかしすぎ
mallocの挙動はヒープのアルゴリズム次第
mallocの挙動はヒープのアルゴリズム次第
679デフォルトの名無しさん
2017/09/17(日) 17:55:14.06ID:S40DCpdn malloc,newの挙動はハードとOSによって変化するという記述は見たことあるけどな
680デフォルトの名無しさん
2017/09/17(日) 18:02:58.95ID:S40DCpdn ごめん、ハードとソフトウェアだった
681デフォルトの名無しさん
2017/09/17(日) 18:10:58.66ID:hRPbVJUN ヒープの管理しないでなんとかなるレベルのものはgc言語使えばいいんでは?
このスレの趣旨的にそうでしょ?
このスレの趣旨的にそうでしょ?
682デフォルトの名無しさん
2017/09/17(日) 21:59:59.26ID:S40DCpdn 自分はメモリ対策プログラムを作って対応したけどな。
メモリサイズを三種類用意して、メモリに対するガードの確実な作りにした。
現在のサイズに使われてるサイズにリミットサイズの三種類のサイズな。
外に出てくるサイズは現在のサイズ、
使われてるサイズはメモリを増やした場合の最大取得サイズで、事実上の取得サイズ、
リミットサイズは取得できるメモリの上限。
で、これらを組み合わせてスーパークラスを作って基本的に対応させてる。
メモリサイズを三種類用意して、メモリに対するガードの確実な作りにした。
現在のサイズに使われてるサイズにリミットサイズの三種類のサイズな。
外に出てくるサイズは現在のサイズ、
使われてるサイズはメモリを増やした場合の最大取得サイズで、事実上の取得サイズ、
リミットサイズは取得できるメモリの上限。
で、これらを組み合わせてスーパークラスを作って基本的に対応させてる。
683デフォルトの名無しさん
2017/09/17(日) 22:08:00.63ID:S40DCpdn メモリの増減には現在のサイズで対応し、このサイズが必要以上に大きくなると
使われてるサイズを拡張するようにした。リミットサイズは滅多に使わないけれども、
一応対応させた。
メモリに対する読み書きは専用関数を経由して読み書きするようにしたから、
素人が使っても安全なぐらいのプログラムになってる。
使われてるサイズを拡張するようにした。リミットサイズは滅多に使わないけれども、
一応対応させた。
メモリに対する読み書きは専用関数を経由して読み書きするようにしたから、
素人が使っても安全なぐらいのプログラムになってる。
684デフォルトの名無しさん
2017/09/17(日) 22:27:01.93ID:S40DCpdn あと、動的配列ってのを作って、複数のメモリ取得に対応させた。
メモリにヘッダとフッタを用意して、フッタには複数配列のデータに対応させ、
ヘッダには配列数とメモリサイズを入れてる。フッタには>>682のデータを持たせた。
ある意味では拡張コンパクションみたいなモノになった。
メモリにヘッダとフッタを用意して、フッタには複数配列のデータに対応させ、
ヘッダには配列数とメモリサイズを入れてる。フッタには>>682のデータを持たせた。
ある意味では拡張コンパクションみたいなモノになった。
685デフォルトの名無しさん
2017/09/17(日) 22:33:12.53ID:S40DCpdn で、アローケートが一回だけになるようにして、あとはリアロークで対応させた。
おかげでメモリの消費効率は異常なまでに効率よく使えるようになったよ。
あと、動的配列使う場合はいったんメモリをフォーマットするようにしたけどね。
おかげでメモリの消費効率は異常なまでに効率よく使えるようになったよ。
あと、動的配列使う場合はいったんメモリをフォーマットするようにしたけどね。
686デフォルトの名無しさん
2017/09/17(日) 23:21:53.67ID:S40DCpdn それから、動的配列は入れ子構造にすれば色々と応用がきくようになってるけどな。
で、追記式みたいにデータが動くツリー構造とかが使えるようになってる。
で、追記式みたいにデータが動くツリー構造とかが使えるようになってる。
687デフォルトの名無しさん
2017/09/17(日) 23:27:13.12ID:2kxiy1Rb アセンブラできない馬鹿がC++使うことを想定するとGCは成功と言わざるをえない。
688デフォルトの名無しさん
2017/09/18(月) 05:14:41.46ID:4HKrfROv ID:S40DCpdn は壊れたプログラマ
689デフォルトの名無しさん
2017/09/19(火) 04:18:18.94ID:GmtdcLyZ メモリを動かして処理すれば出来る事なのにな
出来る事を出来ないというのは間違い
出来る事を出来ないというのは間違い
690デフォルトの名無しさん
2017/09/19(火) 09:15:50.12ID:sOczhhK4 誰へのレスかすらわからないというね
誰も何も「出来ない」という趣旨のレスはしてないと思うが
独り言かね
誰も何も「出来ない」という趣旨のレスはしてないと思うが
独り言かね
691デフォルトの名無しさん
2017/09/19(火) 12:34:55.99ID:kI9ocUjD 前日に連続して意味不明な独り言してるやつがいるからそれの続きだろ
692デフォルトの名無しさん
2017/09/19(火) 17:17:32.47ID:xxOzXrDl ワッチョイ推奨
693デフォルトの名無しさん
2017/09/23(土) 13:33:17.07ID:J7EIO5I9 malloc()関数の内部はOSからメモリをまとめて取ってくる処理と、
すでに取ってきたメモリを(free()で空きが生じたとき)やりくりする処理の2本立て
前者の処理(システムコールの呼び出し)は比較的高コストなのでmalloc()の度に呼びはしない
また後者の処理は、連続したアドレス範囲のメモリを確保できている前提で動く
ページングはもっと下のレイヤーで行われるので、
malloc()のコード自体がMMUの有無やOSの違いを関知したりはしない
すでに取ってきたメモリを(free()で空きが生じたとき)やりくりする処理の2本立て
前者の処理(システムコールの呼び出し)は比較的高コストなのでmalloc()の度に呼びはしない
また後者の処理は、連続したアドレス範囲のメモリを確保できている前提で動く
ページングはもっと下のレイヤーで行われるので、
malloc()のコード自体がMMUの有無やOSの違いを関知したりはしない
694デフォルトの名無しさん
2017/09/23(土) 13:35:30.80ID:J7EIO5I9 例外的な変態実装は知らんが、まあ普通は
695デフォルトの名無しさん
2017/09/23(土) 14:27:08.01ID:Dvp9BlYO 最近はjavascriptのレイヤーとかまで出来てさらに複雑面倒に
696デフォルトの名無しさん
2017/10/26(木) 07:49:10.45ID:7YV3WIz9 かなり無駄な処理してそうだ
697デフォルトの名無しさん
2018/05/23(水) 21:27:23.53ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
3682F
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
3682F
698デフォルトの名無しさん
2018/07/05(木) 00:30:07.61ID:RfoszcD2 IZ6
699デフォルトの名無しさん
2018/08/31(金) 07:07:54.70ID:EIZBTnQd 保守
700デフォルトの名無しさん
2018/08/31(金) 23:14:14.49ID:qeyIwfZb 結論:GCは失敗
701デフォルトの名無しさん
2018/10/30(火) 23:04:20.19ID:POwfr3jz GCをルンバで例えたらどうだろう
自動
しかしテーブルの上や
冷蔵庫の中は片付けない
日常生活にさしさわりなく動いてほしい
自動
しかしテーブルの上や
冷蔵庫の中は片付けない
日常生活にさしさわりなく動いてほしい
702デフォルトの名無しさん
2018/10/30(火) 23:46:35.14ID:j0ABINKp それに加えてルンバが動けるように床は片付けておかないといけないとか
自動で上手く機能させるために気にしないといけない事が色々ある
自動で上手く機能させるために気にしないといけない事が色々ある
703デフォルトの名無しさん
2019/07/03(水) 08:55:46.04ID:XKc3eOoC もういらないって明示的に書かなきゃならないのなら自前で管理するのと一緒だよな。
アマチュアがサンデープログラムしたり、短時間で終了するアプリならむしろ楽チンだけど、
365日24時間稼働し続けるシステムには致命的な問題になるからなぁ
アマチュアがサンデープログラムしたり、短時間で終了するアプリならむしろ楽チンだけど、
365日24時間稼働し続けるシステムには致命的な問題になるからなぁ
704デフォルトの名無しさん
2020/02/13(木) 08:56:02.27ID:B+Fb/epo まあ落ちるアプリの多いこと
705デフォルトの名無しさん
2020/02/13(木) 15:29:41.61ID:z5cRWLgY GCがある言語でも、shallow copy と deep copy のどちらにすべきかの判断が難しくて、結局、間違えてバグの原因になる可能性がかなり残る。
また、C/C++ポインタのミスを危険視する人がいるが、多くの場合はプログラム開発時にテストをすれば間違いが発見できる。
C/C++でのバッファオーバーランを気にする人がいるが、逆にGCがある言語でも、間違って1つ右隣の要素にしてしまったり、処理する個数を1つ間違ったりするミスは有り得て、その場合、厳密な意味でのバッファオーバーランは無くても処理内容自体はバグる。
また、C/C++ポインタのミスを危険視する人がいるが、多くの場合はプログラム開発時にテストをすれば間違いが発見できる。
C/C++でのバッファオーバーランを気にする人がいるが、逆にGCがある言語でも、間違って1つ右隣の要素にしてしまったり、処理する個数を1つ間違ったりするミスは有り得て、その場合、厳密な意味でのバッファオーバーランは無くても処理内容自体はバグる。
706デフォルトの名無しさん
2020/02/22(土) 01:52:20.63ID:eI8xgqVo No GC派なんだけど、WebサーバーをC++とかで実装しても結局力持て余す感はあるよな
それだからかなり性能下げてもいいからちょっとでも早く作れるスクリプト言語採用されるってのもありそう
それだからかなり性能下げてもいいからちょっとでも早く作れるスクリプト言語採用されるってのもありそう
707デフォルトの名無しさん
2020/02/25(火) 21:09:36.95ID:EsX3m3+2 GCのメリットは言語の文法が簡単になること。
GCはスクリプト言語のためにある。
GCはスクリプト言語のためにある。
708デフォルトの名無しさん
2020/02/26(水) 10:49:39.07ID:wiEfavJ1 (destructor)()
dispose()
destroy()
close()
free()
delete
dispose()
destroy()
close()
free()
delete
709デフォルトの名無しさん
2021/10/13(水) 08:41:51.52ID:Qk99MJFD 今やGCのない言語でweb framework書く人間は絶滅危惧種
2022/12/27(火) 13:22:02.97ID:k0608tOt
このスレってガイジ扱いされてたけどRustとか出てきて実は正論だったんじゃね?って見直してるわ
711デフォルトの名無しさん
2022/12/27(火) 15:08:00.70ID:ITKU+yxr てへっ(∀`*ゞ)テヘッ
712デフォルトの名無しさん
2022/12/28(水) 20:55:42.01ID:kKtGrfmE おれはGCが最初から分かりづらいなぁと思ってたよ。mallocやnewより
713デフォルトの名無しさん
2022/12/29(木) 10:46:26.29ID:jCj0trE4 >>708
release
release
714デフォルトの名無しさん
2022/12/29(木) 16:52:23.68ID:HWC94+Gl GCは停止時間問題を解決できないまま生涯ふわふわした存在で居続けるのだよ
715デフォルトの名無しさん
2023/01/01(日) 09:16:28.52ID:A1pcbmVG716デフォルトの名無しさん
2023/02/08(水) 15:30:25.91ID:MLBtrq1u やはりGCは必要だった
WebAssemblyにガベージコレクション機能が登場、Chrome 111で試験的実装に。Dartなど高級言語のWebAssembly対応へ前進
https://www.publickey1.jp/blog/23/webassemblychrome_111dartwebassembly.html
WebAssemblyにガベージコレクション機能が登場、Chrome 111で試験的実装に。Dartなど高級言語のWebAssembly対応へ前進
https://www.publickey1.jp/blog/23/webassemblychrome_111dartwebassembly.html
717デフォルトの名無しさん
2023/02/10(金) 09:06:41.51ID:fIr5pCup すべてがBASICに戻る
718デフォルトの名無しさん
2023/02/11(土) 11:51:58.99ID:2GIAa1ZP >>717
それもいいな
それもいいな
719デフォルトの名無しさん
2023/03/08(水) 00:10:24.00ID:ZNO423TE GCを含め、「機械に不慣れな人でも簡単にプログラミングできるようにする」という
これまで高級言語が行ってきたような試みはすべてAIに取って替わられるような気がする
まあ、現時点のAIは使い物にならないかもしれないが、いずれは…
これまで高級言語が行ってきたような試みはすべてAIに取って替わられるような気がする
まあ、現時点のAIは使い物にならないかもしれないが、いずれは…
720デフォルトの名無しさん
2023/03/10(金) 23:04:44.35ID:hNo+M64i AIに「これはゴミか?」を学習させていって人間がゴミ認定される日も近い
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- んなっしょい🍬禁止🈲のお🏡
- 映画「ゼルダの伝説」、リンクとゼルダ姫が白人になってしまう。日本のものは日本人だろうが!! [592058334]
