GCは失敗。メモリは自分で管理せよ!
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/10/11(土) 09:13:40.71ID:mzO+gdRv以下GCと記す
プログラマをメモリ管理から開放する!
といいつつ、メモリリーク問題の文献が大量にある。
これすなわち、メモリリーク問題が全然解決していないということ。
さらに、メモリ解放のタイミングの文献まで大量に生み出した。
これすなわち、新たなるメモリ管理に関する問題を生み出したということ。
malloc、freeじゃないが
結局のところ、メモリを管理するという技術は、今しばらくは、身につける・教える・学ぶべきではないだろうか?
使って、そのまま放置しても、基本的にはGCがなんとかしてくれている。
ランジョブからジョブ終了までさほどの時間を要さない。メモリも大して使わないならいいだろう。
しかし、規模が大きくなり常駐ジョブやメモリ大量使用のジョブになってくると、そんなメモリ管理の方法でやっていると、
上記「文献」を生み出されてしまう。
入門時は、メモリに無頓着でもいいだろう。それよりも、目的を達成することが先決だ。
しかし、慣れてきたら、やはりメモリの管理まで余裕を持って自分で行うべきだろう。
0002デフォルトの名無しさん
2014/10/11(土) 09:26:04.88ID:/AOb9xWDただ、メモリ取得にあわせてメモリの配置をうごかしてるから、
処理としては重くなってるけど
0003デフォルトの名無しさん
2014/10/11(土) 09:28:04.43ID:mzO+gdRv0004デフォルトの名無しさん
2014/10/11(土) 09:31:36.41ID:FTKCoifoまぁ君の言う通りだとは思うわ
ただ、時の流れを変えるのはなかなか難しいよ
0005デフォルトの名無しさん
2014/10/11(土) 10:00:31.15ID:4uYM2ueX名前が変わっただけなんだよな
0006デフォルトの名無しさん
2014/10/11(土) 10:02:00.16ID:7SO6QsHv0007デフォルトの名無しさん
2014/10/11(土) 10:07:53.81ID:RJKjicrV0008デフォルトの名無しさん
2014/10/11(土) 10:15:19.31ID:C84ryw+n何言ってんだよアホ
Javaがメモリリークするのはずっと前から知られてる事だし、それはプログラマが
「リークするようなプログラム」を書くからだろうが
0009デフォルトの名無しさん
2014/10/11(土) 10:34:35.80ID:mzO+gdRv0010デフォルトの名無しさん
2014/10/11(土) 10:53:41.89ID:5HiTQGOfGCはバカにつける薬を目指したけど中途半端で、
他のリソースの管理を楽にするRAIIとも相性が悪く
余計な手間を増やすだけに
0011デフォルトの名無しさん
2014/10/11(土) 11:19:13.65ID:vaox7NjvOOでも同じことが言えるんだよね
結局、分割せずに一つのクラスにグダグダと何でもかんでも機能書き込みまくりやがる
んで再利用もされない
馬鹿にプログラミングさせないのが正しい処方
0012デフォルトの名無しさん
2014/10/11(土) 11:24:21.18ID:5SSzSkT30013デフォルトの名無しさん
2014/10/11(土) 12:12:50.56ID:cpMaL1hK0014デフォルトの名無しさん
2014/10/11(土) 12:40:04.63ID:gz4lvABW0015デフォルトの名無しさん
2014/10/11(土) 12:56:22.77ID:8yVA6sZ10016デフォルトの名無しさん
2014/10/11(土) 13:16:23.99ID:XZu+KoKv0017デフォルトの名無しさん
2014/10/11(土) 14:21:55.07ID:cDJhBayoダングリングポインタによるやっかいなバグが発生しない
0018デフォルトの名無しさん
2014/10/11(土) 16:06:07.68ID:5SSzSkT3早くなる
とか
広大なメモリ空間でゴミ集めしてもね
0019デフォルトの名無しさん
2014/10/11(土) 16:22:03.92ID:0tst77Z4C++ぐらいでしょ?
0020デフォルトの名無しさん
2014/10/11(土) 17:01:29.09ID:gz4lvABW0021デフォルトの名無しさん
2014/10/11(土) 17:03:09.93ID:gz4lvABW0022デフォルトの名無しさん
2014/10/11(土) 17:35:30.35ID:eOQAHjvH今じゃほとんど使われていないんじゃないか?
メジャーなところでGC搭載前のObjective-Cくらい?
0023デフォルトの名無しさん
2014/10/11(土) 17:41:38.78ID:Qk2dzUbv0024デフォルトの名無しさん
2014/10/11(土) 18:24:06.71ID:Sxw1t6Y70025デフォルトの名無しさん
2014/10/11(土) 18:31:05.39ID:0tst77Z4循環参照自体は怖くないでしょw
怖いのはそれを原因にしておきるメモリリーク。
そっちは検出できる。
それに循環参照ごときじゃメモリリークは起きないのが
ほとんどだし。
0026デフォルトの名無しさん
2014/10/11(土) 19:04:06.70ID:h48KXGlz0027デフォルトの名無しさん
2014/10/11(土) 19:14:27.18ID:P1IOX8Um0028デフォルトの名無しさん
2014/10/11(土) 19:15:00.75ID:0tst77Z40029デフォルトの名無しさん
2014/10/12(日) 05:43:17.17ID:Du/HgjiN0030デフォルトの名無しさん
2014/10/12(日) 07:08:38.14ID:jwvcB2bY0031デフォルトの名無しさん
2014/10/12(日) 07:16:45.94ID:jjrAIsW+採用したのはJavaが最初なんだけどな。
0032デフォルトの名無しさん
2014/10/12(日) 07:24:12.59ID:Du/HgjiNそして参照カウンタ方式でも循環参照は解決できないよねえ。
objcは少なくとも今でもそうだな。
swiftでは改善されてるの?
0033デフォルトの名無しさん
2014/10/12(日) 07:25:36.74ID:yWo9u0csリークじゃなくてキープなら循環参照関係なくね?
0034デフォルトの名無しさん
2014/10/12(日) 07:25:38.03ID:jjrAIsW+参照カウンタ ”だから" 循環参照でメモリリークするんだけど?
0035デフォルトの名無しさん
2014/10/12(日) 07:35:30.36ID:Du/HgjiNプログラマがもう使ってない認識なのにキープしたままになるのは、広義のメモリリークではありますわね。
>>34
いや、原理的にはもう一層上のとこで各オブジェクトの参照カウンタを監視できれば、一応解決はできる。
Delphiのカスタムメモリマネージャでそういうのやろうとしてたプロジェクトあった記憶があるんだけど、どうなったのかなあれ。
0036デフォルトの名無しさん
2014/10/12(日) 09:45:05.81ID:6t43fLEu開放忘れですよね
0037デフォルトの名無しさん
2014/10/12(日) 10:01:07.24ID:Rdz70+uR0038デフォルトの名無しさん
2014/10/12(日) 10:06:02.46ID:PS2RkwMW0039デフォルトの名無しさん
2014/10/12(日) 11:06:29.68ID:jwvcB2bYNULLになってなければ最後に解放。
NULLなら使ってない。解放済み。とかやってたころと結局変わってないよね。
むしろ、解放のタイミングとか考えなきゃいけない。やること増えたような気がする。
char *data = NULL;
略
data = (char *)malloc(.........)
if(!data)
goto 最後
else
略
略略略複雑な動き略略略略略
最後
if(NULL == data)
free(data);
0040デフォルトの名無しさん
2014/10/12(日) 11:11:22.69ID:cL8Hj/o5もっとずっと大昔からあるだろ。
>>32
perlも参照カウントだな。
perlのはGCでobjcのはGCではないと思うけど、
何が違うんだろうな。
0041デフォルトの名無しさん
2014/10/12(日) 11:17:35.70ID:Du/HgjiN0042デフォルトの名無しさん
2014/10/12(日) 11:20:10.87ID:Du/HgjiN一方Cはnullパディングなメモリを自分で確保して解放して…
0043デフォルトの名無しさん
2014/10/12(日) 11:32:15.06ID:cL8Hj/o5なるほど。
あとobjcのは自動だけどあんまり透過的ではないね。
0044デフォルトの名無しさん
2014/10/12(日) 11:42:15.44ID:yWo9u0cs参照カウントを明示的にデクリメントするのは普通GCと呼ばれないと思う。
C++のスマートポインタは微妙なとこだが。
個人的には、実際の回収のタイミングをプログラマが制御できるかどうかが
分かれ目かな。
0045デフォルトの名無しさん
2014/10/12(日) 11:45:40.46ID:cL8Hj/o5いや、今のobjcはそこは自動。
参照カウントを操作するコードはコンパイラが勝手に入れて、プログラマは触れない。
0046デフォルトの名無しさん
2014/10/12(日) 11:46:08.06ID:oZdnSd4XだからGCは失敗 ← は?
0047デフォルトの名無しさん
2014/10/12(日) 12:16:18.39ID:K67PydJNauto_ptr/unique_ptrと同じことをするのに
javaのtry with resourcesや
c#のusing,dのscope
どれも笑えるほど間抜けで間違いやすく
リソース掴むかどうかプログラマが
知っている必要があるとか
色々破綻しすぎ
0048デフォルトの名無しさん
2014/10/12(日) 12:27:00.92ID:XUhdfZSsGCの目的を達せられてないなら、そう評価されても仕方ないやろ
0049デフォルトの名無しさん
2014/10/12(日) 12:37:01.74ID:9H44j9Kw0050デフォルトの名無しさん
2014/10/12(日) 12:37:50.50ID:hLdPYKPKGCじゃなくてARCだろ
0051デフォルトの名無しさん
2014/10/12(日) 13:01:26.29ID:sv4A2Uaz> GCの目的を達せられてない
ちゃんと使えてないだけだろ
それを GC のせいにするなよ w
0052デフォルトの名無しさん
2014/10/12(日) 13:25:42.92ID:aqGemz9Oち切る仕組みはあって良いと思うまあ手抜きしたいだけだが
0053デフォルトの名無しさん
2014/10/12(日) 13:29:57.54ID:oZdnSd4XGCがあれば起きないメモリリークもあるんだから
それを理由にGC抜きでメモリを管理すべきという主張はおかしい
0054デフォルトの名無しさん
2014/10/12(日) 13:47:40.68ID:PS2RkwMWデメリットがキツすぎてメリットはないようなもの
0055デフォルトの名無しさん
2014/10/12(日) 13:52:35.33ID:9H44j9KwGCだとどこでリークしてるかわからないからいらない
0056デフォルトの名無しさん
2014/10/12(日) 13:59:06.09ID:Du/HgjiN0057デフォルトの名無しさん
2014/10/12(日) 14:01:17.81ID:9H44j9Kwすげーな
0058デフォルトの名無しさん
2014/10/12(日) 16:33:59.45ID:ZNdZQbYT旧タイプというか本来タイプの技術者と壁があるようだな
0059デフォルトの名無しさん
2014/10/12(日) 16:38:08.31ID:jjrAIsW+他人が作った技術なんて信用してないからな。
全て自分で管理するのが一流の技術者
0060デフォルトの名無しさん
2014/10/12(日) 16:42:45.90ID:ZNdZQbYTそれが理想だが、仕事だと環境を選べない。石を直接叩いた時は素直でやりやすかったものよ
0061デフォルトの名無しさん
2014/10/12(日) 16:50:59.96ID:b192FRFU0062デフォルトの名無しさん
2014/10/12(日) 17:10:56.08ID:uNtO2YXD> それが理想だが、仕事だと環境を選べない。
じゃあ趣味の話をしてくれよ。
sqrt(a * 2 + b * 3)
を「素直でやりやすい方法」で書いたらどうなるの?
0063デフォルトの名無しさん
2014/10/12(日) 17:14:52.08ID:WHilwmxs今よりもはるかに小さかっただけだよ。
簡単な事しかしてない。
いや、コード自体は難しいんでしょ?
簡単なことっていうのは、コードの話ではなくて
作る機能のこと。
0064デフォルトの名無しさん
2014/10/12(日) 17:48:09.49ID:ZNdZQbYT多用途コンピュータではない物や独自のデバイスを制御する時に石を叩く。見慣れたアプリとは
違った物を作るときに必要になる。
>>62
お前はその程度のコードに設計が必要なのか?
0065デフォルトの名無しさん
2014/10/12(日) 18:04:01.60ID:WHilwmxs設計? どこからでてきたの?
いや、石を直接叩いていたら
難しいだろって話。
これが難しく感じるならダイアログボックスを
出すコードでもいいよ。
JavaScriptなら
alert("あほ");
0066デフォルトの名無しさん
2014/10/12(日) 18:15:24.76ID:aqGemz9O信頼出来ると思うのは気のせいか
0067デフォルトの名無しさん
2014/10/12(日) 18:21:08.51ID:6hSJbmJs何度もやることではないんだよね。
一回やったことと同じようなことは
二度とやらないぐらいの気持ちでやらないといけない。
同じことを何度も繰り返すのはコンピュータが得意とするところなので
人間がやってる「同じようなこと」はコンピュータにやらせるもの。
メモリ管理なんてのも、人間がやることじゃないんだよ。
何度も同じことをやるなんてサルのオナニーと一緒だよ。
0068デフォルトの名無しさん
2014/10/12(日) 18:24:13.59ID:ZNdZQbYTこのスレでは実行環境の話をしてるんだ。それを理解して失せろ
>>67
その理屈だと一度使ったライブラリは二度と使うなという事になるな
0069デフォルトの名無しさん
2014/10/12(日) 18:28:09.44ID:6hSJbmJs> その理屈だと一度使ったライブラリは二度と使うなという事になるな
意味不明。同じことができるならコードを書くなって話。
同じコードを書かないで出来るなら、ライブラリを使ったコードも書かなくていいよw
0070デフォルトの名無しさん
2014/10/12(日) 19:46:54.20ID:im4AGP4w0071デフォルトの名無しさん
2014/10/12(日) 19:51:27.69ID:ZNdZQbYTリソースを扱う事もファイルの読み書きも出来ない。その用途は毎回違う。
それを同じ処理で出来ると思ってるのが凄い
0072デフォルトの名無しさん
2014/10/12(日) 20:16:48.31ID:FZ1mZF0A> GC派はコンピュータの仕組みを知らないからかな?
まるで、何かの仕組みを知った人は、その仕組みを
使わないことを選ぶみたいな言い方じゃないか?
ポンプの仕組みを知った人は、ポンプを使わずに自分で吸い上げるようになるみたいな。
仕組みを知った上で、その仕組が便利だから使うんだよ。
> それを同じ処理で出来ると思ってるのが凄い
今、GCの話だったよね? メモリ確保する時の話じゃなくて
メモリを解放する時の話。
お前の書くコードは、同じメモリを使ってるのに、
毎回違う方法でメモリを解放してるのか?
ばかじゃね?
0073デフォルトの名無しさん
2014/10/12(日) 20:18:00.19ID:FZ1mZF0AfreeForFile とかfreeForConfigFileとか
そういう関数作ってんの?
0074デフォルトの名無しさん
2014/10/12(日) 20:21:04.63ID:vwmhZXgg0075デフォルトの名無しさん
2014/10/12(日) 20:23:19.99ID:cL8Hj/o5正しくは?
0076デフォルトの名無しさん
2014/10/12(日) 20:23:46.40ID:FZ1mZF0A2ちゃんねるはじめてか?
これが普通なんだよ。
0077デフォルトの名無しさん
2014/10/12(日) 21:18:05.03ID:ZNdZQbYT0078デフォルトの名無しさん
2014/10/12(日) 21:27:56.88ID:jwvcB2bYそんなやつが、メモリリークが発生して、それを調査できるスキルがあるわけもなし
ちゃんとメモリ管理できてる人からすると、よけい複雑になっただけ
0079デフォルトの名無しさん
2014/10/12(日) 21:34:54.47ID:uoArxlQJあぁ、この中でfree書き忘れたことがない人だけ
石を投げなさいってやつだな(大爆笑)
0080デフォルトの名無しさん
2014/10/12(日) 21:45:20.46ID:K67PydJN忘れるとかそれ以前の問題で
終わっているような。
0081デフォルトの名無しさん
2014/10/12(日) 21:52:54.07ID:uoArxlQJ仕組みを知った人は、面倒でも効率が悪くて
ミスを誘発しそうでも、
自分でやるのが自称プロだそうですよwwww
0082デフォルトの名無しさん
2014/10/12(日) 22:01:17.22ID:K67PydJN全く同じやり方で、他のリソースの
解放も勝手にやってくれるようになる。
怖いのは循環参照だけ。
この場合GC言語だとメモリのリークは防げても、循環参照しているオブジェクトに
保持されているリソースの解放タイミングは
全く保証されない。
で、それの対策も考えたら結局
c++で弱参照、単なるポインタなど
駆使するのが一番効率的
0083デフォルトの名無しさん
2014/10/12(日) 22:05:26.88ID:uoArxlQJ保持されているリソースの解放タイミングは
全く保証されない。
その反対で、GCではない言語だとメモリリークするわ、循環参照しているオブジェクトは
解放できないわで、もっと問題が起きる。
0084デフォルトの名無しさん
2014/10/12(日) 22:08:58.07ID:jwvcB2bYだれ?誰と戦ってるの?
0085デフォルトの名無しさん
2014/10/12(日) 22:09:56.49ID:uoArxlQJ知らぬが仏だよ(笑)
0086デフォルトの名無しさん
2014/10/12(日) 22:27:26.00ID:6t43fLEuGCでパフォーマンス上がることもあるし
0087デフォルトの名無しさん
2014/10/12(日) 23:01:07.26ID:yWo9u0csGC言語でリソースの解放タイミングが保証されないのは、別に
循環参照に限った話じゃないと思うが。
0088デフォルトの名無しさん
2014/10/12(日) 23:05:39.92ID:sv4A2UazGC は勝手にやらせとくと色々予測できないし、ちゃんと制御しようとすると面倒なことになって本末転倒だったりする
結局スクリプトとか C# で作るツールとかの小規模なプログラムでしか使ってないや
0089デフォルトの名無しさん
2014/10/12(日) 23:19:48.88ID:K67PydJNいやまあ言いたいことは同じなんだけど。
ヒープみたいに、lazyに解放すればいい
リソースなんて少数派な位なのに
ヒープだけを特別扱いしてリークしづらく
しているのがGCで、逆に他のリソースの
解放に関しては糞の役にも立たない。
頑張って使いやすくしても
try with resourcesみたいなのが精々
0090デフォルトの名無しさん
2014/10/12(日) 23:20:37.56ID:Du/HgjiN0091デフォルトの名無しさん
2014/10/13(月) 00:36:28.02ID:XlHNUUuP> 頑張って使いやすくしても
> try with resourcesみたいなのが精々
言い方がひねくれてるだけで、
使いやすくなってるんだろ?
100% じゃなくても90%なら0%よりもはるかにいいし。
君、完璧主義かい? 完璧じゃなければ0の方がいい。
命を完全に守れないなら、安全装置はいらない。
0092デフォルトの名無しさん
2014/10/13(月) 01:50:00.34ID:qVWnI3+v0093デフォルトの名無しさん
2014/10/13(月) 02:14:43.55ID:Sk2z4NAD別にGCとRAIIが必ずしも互いに排他的なものでも無いだろうし
0094デフォルトの名無しさん
2014/10/13(月) 02:52:33.01ID:Y+iyP5NT参照しないようにする=null入れるだけの話だろ。
0095デフォルトの名無しさん
2014/10/13(月) 02:57:40.58ID:2n2KRb08Unixなんか、リソースは何でもファイルですよ?
これが抽象化というもの。
0096デフォルトの名無しさん
2014/10/13(月) 03:02:03.17ID:jfB1gY05OS側から勝手に参照し続けるKindleという機種がありましてな…。
0097デフォルトの名無しさん
2014/10/13(月) 05:51:50.99ID:Y+iyP5NT0098デフォルトの名無しさん
2014/10/13(月) 09:29:14.75ID:ammU0rqh0099デフォルトの名無しさん
2014/10/13(月) 09:48:47.95ID:jZxRKtQHDBのコネクションとかファイルハンドルとか
0100デフォルトの名無しさん
2014/10/13(月) 14:38:15.95ID:yJLU3TGpそれは「解放する方法」であって
手動か自動かは関係ないよ。
0101デフォルトの名無しさん
2014/10/13(月) 15:01:00.74ID:iUH6VxYJnewしたらdelete
それでよかったのに
GCになって、null入れなきゃだめ、disposeしなきゃだめ、さらに世代云々・・・。
0102デフォルトの名無しさん
2014/10/13(月) 15:10:40.21ID:ysc5yoNU0103デフォルトの名無しさん
2014/10/13(月) 16:19:06.94ID:plGQaU3/0104デフォルトの名無しさん
2014/10/13(月) 16:38:33.91ID:yJLU3TGp> それでよかったのに
よくなかっただろ?
クラス内部でメモリが確保されている場合(つまりオブジェクトを返す関数)
誰が解放するのかわからない。
クラスに解放してもらうのが一般的だがそうすると、malloc / free だけじゃなく
> GetWindowDC 関数を呼び出してウィンドウデバイスコンテキストを取得した場合や、
> GetDC 関数を呼び出して共通デバイスコンテキストを取得した場合は、
> その後、ReleaseDC 関数を呼び出してデバイスコンテキストを解放しなければなりません。
みたいなルールがクラスごとに大量にできることになる。
0105デフォルトの名無しさん
2014/10/13(月) 16:56:47.75ID:plGQaU3/ポインタでつまずく奴が多いと聞いたが、できるだけ早く戦力に育てたいのと熟練技術者が欲しいという
双反する要求が問題かもな
0106デフォルトの名無しさん
2014/10/13(月) 17:45:42.07ID:R5t/GNKUコンピュータが自動化できることを
人間がちまちまやるのはマヌケなことで
そんなことに時間を使うのはプロじゃない。
素人は何も考えずに言われたことしかしないから
それが普通と思ってずっと同じことをする。
働いている時間が長いだけのエセ技術者が多い。
何度も同じことをやってると思ったら
それをなくそうという発想が大事
0107デフォルトの名無しさん
2014/10/13(月) 17:55:40.57ID:iUH6VxYJといいつつ、これだけ議論が出てくるってことは、解放されてないってことだ。
0108デフォルトの名無しさん
2014/10/13(月) 18:10:19.75ID:ammU0rqh0109デフォルトの名無しさん
2014/10/13(月) 18:22:55.35ID:R5t/GNKU議論が出てくれば、解放されていないことになるという
理屈がわからんよ。
論理的じゃないね。
議論の内容はメモリ管理から解放されたかどうかじゃなくて、
俺は自分で管理しても出来る!
メモリは自分で管理せよ!って
喚いてるだけじゃんか。
その理由すら述べられていない。
0110デフォルトの名無しさん
2014/10/13(月) 18:28:57.57ID:Okyxmr/tSTL使えばメモリリークからは解放されるんでね?
そして今度はメモリのフラグメンテーション問題に捕まるとw
0111デフォルトの名無しさん
2014/10/13(月) 18:32:51.44ID:I6MRDE10どう使おうが自由だが、MSさんはアンマネージドメモリーを開放するために用意したと言っている
マネージドはあくまでGC使えってことなのかな?
0112デフォルトの名無しさん
2014/10/13(月) 18:34:33.46ID:jZxRKtQHC#の話ですまんが、IDisposable.Dispose()を実行すれば、DBコネクションなら即閉じられるようになってるじゃん
これって手動って言わない?
もちろん放置すればGC時にファイナライザで閉じられるけど
0113デフォルトの名無しさん
2014/10/13(月) 18:37:06.45ID:R5t/GNKU> そして今度はメモリのフラグメンテーション問題に捕まるとw
メモリのフラグメンテーション問題は
GCを使わなくても起きることだから
別問題だな。
0114デフォルトの名無しさん
2014/10/13(月) 18:40:18.91ID:jZxRKtQHヒープに関してはGCしかない…
シビアなメモリ管理が必要ならGCのない言語使うしかない
0115デフォルトの名無しさん
2014/10/13(月) 18:41:53.43ID:R5t/GNKUそれは具体的にはどんなものかって話がしたいですね。
0116デフォルトの名無しさん
2014/10/13(月) 18:54:23.74ID:I6MRDE10それほど作る人も沢山居ないよね
0117デフォルトの名無しさん
2014/10/13(月) 19:36:50.37ID:Okyxmr/t自力でコンパクション作っとかないとフラグメンテーションでメモリ取得に失敗するわな
というか、フリーのGCやコンパクションって無いの??
0118デフォルトの名無しさん
2014/10/13(月) 19:54:12.82ID:Okyxmr/tメモリのフラグメンテーションで調べればどんな状況が発生するかは理解できると思う
要するにメモリ取得や解放の繰り返しでメモリが虫食い状態になる
0119デフォルトの名無しさん
2014/10/13(月) 20:26:24.03ID:qIojKSBEそれで追いつかないほどシビアな世界はそもそも動的にメモリ確保するの禁止だったりしそう。
0120デフォルトの名無しさん
2014/10/13(月) 20:48:29.24ID:plGQaU3/メモリ一つ管理できないで何を管理するプログラムを組み気かと
0121デフォルトの名無しさん
2014/10/13(月) 20:50:47.42ID:Okyxmr/tフラグメンテーションが発生しにくくはなってるが、全く起きないわけじゃない
大きめのメモリ同士を扱う場合は、どうやっても配置に無理が生じる
これを回避するには動的メモリ確保を禁止するか、コンパクションを作るしかない!
というか、コンパクションは作るの面倒だったな
0122デフォルトの名無しさん
2014/10/13(月) 20:55:22.39ID:jfB1gY050123デフォルトの名無しさん
2014/10/13(月) 20:57:44.08ID:iOywxQpx0124デフォルトの名無しさん
2014/10/13(月) 21:06:21.12ID:yDwfk/q+32bitプロセスなら仮想メモリ空間
食い潰すこともあるんでね?
64bitなら今のところどころか
かなり遠い将来まで大丈夫だろうが。
0125デフォルトの名無しさん
2014/10/13(月) 21:08:06.85ID:vSlytRGOアプリの本質とは関係ないメモリ管理に悩まなくて済むのなら、
1G程度のメモリリークなんてどうでもいい。
GC様々だ。
0126デフォルトの名無しさん
2014/10/13(月) 21:09:33.61ID:Okyxmr/tメモリをポインタで管理している以上、メモリ配置に問題が起きる可能性は避けられない
32bitで管理してるなら、ポインタで管理できるメモリは2Gバイトを超える事はない
64bitだともうちょい楽なんだけどな
0127デフォルトの名無しさん
2014/10/13(月) 21:14:48.07ID:plGQaU3/0128デフォルトの名無しさん
2014/10/13(月) 21:16:45.07ID:Okyxmr/tしかしたいていの場合は、コンパイラは64bit設定ではなく、32bitの設定になっているけどな
まあ、世の中のディスクトップPCから32bitが死滅しない限りはこのまんまの状態が続くんだろうな
0129デフォルトの名無しさん
2014/10/13(月) 21:28:01.09ID:QgIQdsn/AがBを参照して、BがAを参照したらメモリが解放されなくなるんだぞ!
GCを使わなければほら、Aをdelete、Bをdeleteするだけでいいんだ!」
「そうか。Aだけnullを代入すれば循環参照は解放されるから
GCの方が手間が半分になると思っていたよ。」
「・・・(くやしい!言い返せない!)」
0130デフォルトの名無しさん
2014/10/13(月) 21:38:25.84ID:+oHLinScCやC++の場合はな
C#やVBの場合は関係無いな
0131デフォルトの名無しさん
2014/10/13(月) 21:42:35.91ID:6Jt59JIp64bitのC#と32bitのC/C++では、どっちの方が早いんだろ?
0132デフォルトの名無しさん
2014/10/13(月) 21:47:48.63ID:6Jt59JIpC/C++でGC使って64bitでコンパイルすれば良いんじゃね?
0133デフォルトの名無しさん
2014/10/13(月) 22:42:28.43ID:Y+iyP5NTどう違うんだって話はあるが、そこらへんを自動で判断できる
ほどコンピュータは賢くない。
0134デフォルトの名無しさん
2014/10/13(月) 22:47:19.03ID:zulUt3IX毎回deleteしなきゃならなんのでは
毎回deleteするほうが、プロっぽいじゃん?
0135デフォルトの名無しさん
2014/10/13(月) 22:48:45.33ID:yDwfk/q+使うとか正気を疑われかねない。
0136デフォルトの名無しさん
2014/10/13(月) 22:58:21.29ID:zulUt3IXメモリ管理が難しくなった。
エラーになったら呼び出しもとどころか
その上の上の上にまでジャンプしたりする。
あんな機能は使うな。
0137デフォルトの名無しさん
2014/10/13(月) 23:07:33.55ID:qIojKSBE0138デフォルトの名無しさん
2014/10/13(月) 23:09:42.85ID:jZxRKtQH※参照カウント方式のGCは知らん
0139デフォルトの名無しさん
2014/10/13(月) 23:10:09.02ID:zulUt3IXだから使うの禁止だ。
0140デフォルトの名無しさん
2014/10/13(月) 23:30:11.08ID:Y+iyP5NTどうするかって話だな。
0141デフォルトの名無しさん
2014/10/14(火) 00:12:20.52ID:a1k8REF8>ディスクトップPC
帰れ
0142デフォルトの名無しさん
2014/10/14(火) 00:47:57.82ID:3uqy4Mr/ポインタを理解できない人への仕様としか思えん。巻き添えになる可能性も随分高くなってきた
0143デフォルトの名無しさん
2014/10/14(火) 00:59:16.64ID:3uqy4Mr/どこかに代入してる可能性無いと言い張るんだね?
0144デフォルトの名無しさん
2014/10/14(火) 00:59:24.56ID:zdidno2b0145デフォルトの名無しさん
2014/10/14(火) 07:11:04.73ID:EvQWtZZXまあ、使わなけりゃ良いだけなんだが
0146デフォルトの名無しさん
2014/10/14(火) 14:47:26.76ID:ehQP27NF0147デフォルトの名無しさん
2014/10/14(火) 22:07:35.48ID:F0kchRkJ可読性落ちるし、エラーの時ちゃんと解放されるよな?って考えていくと
どんどんごちゃごちゃしてくる。
GCがない言語は例外もないので、いちいち値をチェックしてエラーなら
全部解放って書かないといけない。
例外のためのコードとメモリ解放で、関数の半分を占めることもある。
0148デフォルトの名無しさん
2014/10/14(火) 22:20:33.25ID:KA+Nt7Wt肉体労働、ご苦労様です
0149デフォルトの名無しさん
2014/10/14(火) 22:26:34.50ID:YomBVz//そういうことを考えると長期記憶、中期記憶、短期記憶、容量別の
管理ポリシーなんかが必要になってくる。そのへんを自動でやって
くれるのがGCなわけで。
短期小容量なら自動変数(スタック)、中容量ならクラス内でnewと
delete(null)まで管理。複数クラスにまたがる長期大容量記憶なら
管理クラスを作ってそこで一元管理とかね。
0150デフォルトの名無しさん
2014/10/14(火) 23:28:26.53ID:KrwLefD2> GCがない言語は例外もないので、
C++ 君可哀想
0151デフォルトの名無しさん
2014/10/14(火) 23:35:21.44ID:KA+Nt7Wtないときはお手上げですか?
0152デフォルトの名無しさん
2014/10/14(火) 23:47:04.42ID:F0kchRkJん? 一般的に、ないときは「面倒」だよ。
0153デフォルトの名無しさん
2014/10/15(水) 00:03:02.62ID:M/QL++I90154デフォルトの名無しさん
2014/10/15(水) 00:18:10.82ID:9n9kVUvH0155デフォルトの名無しさん
2014/10/15(水) 00:38:31.37ID:M/QL++I9基礎から勉強できない奴が「技術者」になられちゃ現場が地獄だ
ま、どうせポインタも理解できないバカだからな。メンテナンスする方はたまったもんじゃない
0156デフォルトの名無しさん
2014/10/15(水) 00:45:19.17ID:M/QL++I9javaで仕事した(つもり)だぜ!C#で一人前(と思い込んでる)アプリ組んでんだぜって餓鬼が何か
言おうってんだから滑稽だな。井の中の蛙の生きた見本だ。
GCに頼り切って給料貰ってるのに満足してその先を勉強しないんだから技術者に向いてないよ
0157デフォルトの名無しさん
2014/10/15(水) 00:48:33.89ID:9n9kVUvH俺はGC使ってないから偉い(実際は勉強してないが)
0158デフォルトの名無しさん
2014/10/15(水) 00:53:01.51ID:7y/wTrfK0159デフォルトの名無しさん
2014/10/15(水) 01:11:42.77ID:M/QL++I9都合のいい解釈乙
勉強しないのに身の程わきまえず威張ってスレ汚ししてるってのが読めないようだな。
日本語も読めないのにソースコードが読める筈はないわな
お前はCPUの仕様書なんか見たこと無いだろ?
0160デフォルトの名無しさん
2014/10/15(水) 01:19:19.45ID:DJKkUczC何もかもがオブジェクトみたいな言語はなんかよくわからん抽象的な世界の物語なんだから、
やっぱGCなりなんなりで処理系の実装を隠さないとやってられんだろ。
0161デフォルトの名無しさん
2014/10/15(水) 01:20:12.78ID:9n9kVUvH都合のいい解釈しているのはお前では?
なんで勉強してないことにしたいの?
0162デフォルトの名無しさん
2014/10/15(水) 01:20:50.46ID:M/QL++I9メモリ管理も出来ない奴が勉強してるわけがなかろう。自明だ
0163デフォルトの名無しさん
2014/10/15(水) 01:23:53.48ID:9n9kVUvHやっぱりこの解釈で合ってるじゃんw
まったく幼稚だな。
0164デフォルトの名無しさん
2014/10/15(水) 01:24:13.77ID:M/QL++I90165デフォルトの名無しさん
2014/10/15(水) 01:26:35.67ID:LxQxwXzT0166デフォルトの名無しさん
2014/10/15(水) 01:26:36.83ID:M/QL++I9本当にプログラマーやめたほうがいいよ。他の奴が迷惑だ。GCに頼り切っているやつは他の言語は使えない。
GCを利用する技術者は言語にとらわれない。
頼り切るのと利用するのじゃ大違いだ。その差が勉強にあるんだよ
0167デフォルトの名無しさん
2014/10/15(水) 01:28:31.43ID:9n9kVUvHだから勉強してるってw
何を根拠に勉強してないことにしたいの?
0168デフォルトの名無しさん
2014/10/15(水) 01:29:42.90ID:DJKkUczC0169デフォルトの名無しさん
2014/10/15(水) 01:30:37.67ID:M/QL++I9本当に文盲だな。日本人じゃない可能性もある。政治的な問題だがな。
常にGC亡者の荒らしがいるってのがおかしい。
0170デフォルトの名無しさん
2014/10/15(水) 01:38:55.57ID:M/QL++I90171デフォルトの名無しさん
2014/10/15(水) 01:39:55.75ID:7y/wTrfK0172デフォルトの名無しさん
2014/10/15(水) 01:40:22.25ID:9n9kVUvHしていて、それを指摘してるのに
都合のいい解釈をしていないって言い張ってる。
どんだけ自分に都合のいい人間なんだ?w
0173デフォルトの名無しさん
2014/10/15(水) 01:43:52.31ID:M/QL++I9>>170見れば分かる奴はすぐ分かるんだよねww
0174デフォルトの名無しさん
2014/10/15(水) 01:49:42.18ID:9n9kVUvH0175デフォルトの名無しさん
2014/10/15(水) 02:25:18.34ID:M/QL++I90176デフォルトの名無しさん
2014/10/15(水) 07:12:20.38ID:lYOq6uABまあ参照型使いまくるためにGCがあるわけだが
0177デフォルトの名無しさん
2014/10/15(水) 15:27:03.25ID:v6NXSltG0178デフォルトの名無しさん
2014/10/15(水) 20:12:41.76ID:jfSV6itR0179デフォルトの名無しさん
2014/10/15(水) 20:41:27.45ID:77ff/EQS0180デフォルトの名無しさん
2014/10/15(水) 21:04:42.89ID:9n9kVUvHC#、VB、Ruby、Python、Perl、PHP、
Lisp、SmallTalk、Haskell、Go、Swiftz
思いつくままに言語を並べてみたが、
比較的最近生まれたよく使われている言語はすべてGC
GCじゃないのは、C (1972年)、C++ (1983年)、Objective-C (1983年)
ぐらいか
0181デフォルトの名無しさん
2014/10/15(水) 21:25:25.77ID:++xXjZNS0182デフォルトの名無しさん
2014/10/15(水) 22:37:56.89ID:vri764sz原理的にはスタックフレームはメモリのローカリティが高くてキャッシュの効率が高いはず
GCは実装がどうなってるか知らんが、DRAMのrow addressからのアクセスだと
CPUの100クロックは掛かるからローカリティが低いとボトルネックになる可能性があるだろうな
0183デフォルトの名無しさん
2014/10/15(水) 22:48:01.07ID:9n9kVUvH0184デフォルトの名無しさん
2014/10/15(水) 23:02:38.03ID:DJKkUczC0185デフォルトの名無しさん
2014/10/15(水) 23:26:50.97ID:tcLFVAdr7だとさくさく
0186デフォルトの名無しさん
2014/10/16(木) 01:25:53.53ID:lkDPugefデスクトップコンポジションはちらつきを抑えるから気になりにくいだけだよ
つか、Win8が登場した時に7よりキビキビしてるとか言ってたのもいるんだから
当然もっさりにも気付くだろ?
エクスプローラーでsystem32みたいにファイル数の多いフォルダで
スクロールバーをつまんで高速で動かすとCPU負荷が12%(ほぼ1コア占有)になるし、
Catalystも設定項目を切り替えた時に一瞬遅れて切り替わってるのが見える
0187デフォルトの名無しさん
2014/10/16(木) 02:25:19.55ID:g1v1AuWY0188デフォルトの名無しさん
2014/10/16(木) 04:04:38.03ID:fYyW3P4NHDDなどデバイスのアクセス速度は、CPUの千倍以上遅いので、
I/Oなどファイル情報を取得する機能は、
ほとんどがデバイスからの応答待ちとなり、
CPUはスリープしている
CPUを使うのは、エアロのような3D演算とか、
TrueTypeFontのような、VectorGraphicsの演算など
0189デフォルトの名無しさん
2014/10/16(木) 04:12:27.65ID:7g6vpmsmそういう細かいことなんか吹っ飛ばすのがJITコンパイラってもんなんじゃね?
0190デフォルトの名無しさん
2014/10/16(木) 05:43:37.86ID:ZT6Rz/OP最新windosで旧winsowsのアプリを互換させる方法が分からない
0191デフォルトの名無しさん
2014/10/16(木) 08:48:34.98ID:5VQWQXAV古いプログラムも最新のWindowsでうごくんでしょ?
それがMicrosoftのよいところだよ
0192デフォルトの名無しさん
2014/10/16(木) 08:59:19.11ID:dA0hMT5r0193デフォルトの名無しさん
2014/10/16(木) 09:23:45.89ID:cBEAmW2f0194デフォルトの名無しさん
2014/10/16(木) 11:16:01.19ID:xa87SxtN0195デフォルトの名無しさん
2014/10/16(木) 12:35:27.75ID:1m8Z67kI(;´Д`)< スンマセン、直ぐに片付けます
-=≡ / ヽ \_______
. /| |GC|. |
-=≡ /. \ヽ/\\_
/ ヽ⌒)==ヽ_)= ∧_∧
-= / /⌒\.\ || || (´・ω・`)
/ / > ) || || ( つ旦O >>194
/ / / /_||_ || と_)_) _.
し' (_つ ̄(_)) ̄ (.)) ̄ (_)) ̄(.))
0196デフォルトの名無しさん
2014/10/16(木) 14:12:44.84ID:3gVHJ/2iObject型のキャスト周りでヒープを使うみたいなんだけど気のせい?
(リークって訳じゃなくて、一時領域としての使用)
0197デフォルトの名無しさん
2014/10/16(木) 14:39:04.40ID:oAnktbh40198デフォルトの名無しさん
2014/10/16(木) 18:07:49.29ID:Jdhw7SI+0199デフォルトの名無しさん
2014/10/16(木) 18:27:24.82ID:cBEAmW2fGCはオマケなんじゃないかな。
メソッド呼び出しの引数などで、オブジェクトがコピーされず参照で渡されると
効率が良い。
では、戻り値として返されるオブジェクトの生存期間をどうするか?など考えると
GCを搭載するとこに行きつく。
C++は右辺値参照という形でうまいこと解決してる。
RAIIを考えると、C++方式のほうが良いと思う。
0200デフォルトの名無しさん
2014/10/16(木) 18:53:02.70ID:cBEAmW2f0201デフォルトの名無しさん
2014/10/16(木) 18:55:53.59ID:7O3aHiyaどうでもいい。
0202デフォルトの名無しさん
2014/10/16(木) 23:45:09.16ID:Ve1wANVMなら見なければいい。
0203デフォルトの名無しさん
2014/10/16(木) 23:50:48.25ID:LCz8LFpV単一の所有権を持つスマポとそれに対する弱参照の組み合わせで使えればよかったのに。
C++11のはなんか、shared_ptrが基本でunique_ptr/weak_ptrは特殊用途、って感じる。
0204デフォルトの名無しさん
2014/10/17(金) 00:55:39.72ID:cTXFEv420205デフォルトの名無しさん
2014/10/17(金) 01:16:09.81ID:lRK5wm2musing (resource) {} とか try (resource) {} とか無理やりサポートしてるのもあるが
0206デフォルトの名無しさん
2014/10/17(金) 01:52:27.79ID:C7DOShFL姫野ベンチをC#に移植して64ビット最適化ありでビルドして4770K,3.4GHz,TB OFFで実行してみた
C# LARGEサイズ
MFLOPS measured : 392.31 cpu : 57.03
Score based on Pentium III 600MHz : 45.874677
VS2013の/O3だと
MFLOPS measured : 3761.723474 cpu : 57.694098
インテルのコンパイラでAVX2ベクトル化したのだと
MFLOPS measured : 7190.181795 cpu : 51.188518
まあ、こんなもんでしょ
0207デフォルトの名無しさん
2014/10/17(金) 01:59:21.60ID:C7DOShFL移植したC#のコードはここにupしたよ
http://pastebin.com/vm0KbCyK
0208デフォルトの名無しさん
2014/10/17(金) 15:02:41.30ID:uU5Nj9qh犬板ではベンチの読み方が違う。
「CPU58%も使うのか、VSは遅いんだな」ってなる。
0209デフォルトの名無しさん
2014/10/17(金) 15:09:35.78ID:qPP0na7I0210デフォルトの名無しさん
2014/10/17(金) 17:50:17.94ID:daE1z7VZと考えて、基本全部動的に確保したメモリは自分で解放。
というのじゃダメなの?
0211デフォルトの名無しさん
2014/10/17(金) 18:04:15.29ID:bxyVopED0212デフォルトの名無しさん
2014/10/17(金) 18:04:21.78ID:O3Ha9Xaq宗教の信者なので、と、考えるのが最も合理的。
0213デフォルトの名無しさん
2014/10/17(金) 18:39:08.95ID:uU5Nj9qh把握しなければならないので、GCにすべてを押し付けるのは無理だと思うよ。
すると、Javaの割り切ったアイデア全てが否定される。
良いアイデアだと思ったけれど、実際にはそうでもなかったって感じ。
std::unique_ptr<>が基本だと考えるとすべてがうまく回り始める。
人類には、どこに実体が有るかわからないとか、違う次元にもう一つの
実態が存在出来るとか、わかりにくすぎて使えないんだよ。
実体は一つ、他はすべて参照、これで良いんだよ。
人類を超えた超天才ならJava方式を使いこなせるかもしれない。
C/C++の20倍の速さで。←20倍速いベンチとったページが有る。
0214デフォルトの名無しさん
2014/10/17(金) 18:56:55.01ID:O3Ha9Xaq0215デフォルトの名無しさん
2014/10/17(金) 18:59:03.38ID:NBlGniFl0216デフォルトの名無しさん
2014/10/17(金) 19:00:31.99ID:uU5Nj9qh関数型は適用範囲が狭すぎるんだよ。
いずれ関数型の時代が来る可能性はある。
でも、今はまだその時代じゃない。
0217デフォルトの名無しさん
2014/10/17(金) 19:06:36.89ID:O3Ha9Xaq0218デフォルトの名無しさん
2014/10/17(金) 19:37:28.15ID:uNzVvXKG姫野ベンチはメモリアクセスが大きく影響するベンチだよ
C#のスコアが低いのはGCはメモリアクセスが遅いからだと思う
配列の初期化の段階でも2、3秒は掛かってる
0219デフォルトの名無しさん
2014/10/17(金) 20:42:27.58ID:uU5Nj9qh犬板ではCPU使用率が指標になるから、C#の方が速いんだよ。
VCが一番遅い。
CPU使用率が一番高いからな。
0220デフォルトの名無しさん
2014/10/17(金) 21:16:50.24ID:lRK5wm2m0221デフォルトの名無しさん
2014/10/17(金) 21:21:55.89ID:uU5Nj9qhウェブページの表示速度に関して、二秒以内、できれば1秒という指標が有る。
二秒もあれば、C/C++なら地球一周しておつりがくる。
0222デフォルトの名無しさん
2014/10/17(金) 21:52:58.27ID:uNzVvXKG0223デフォルトの名無しさん
2014/10/17(金) 21:56:54.85ID:aWL1PEKf0224デフォルトの名無しさん
2014/10/17(金) 22:16:48.92ID:uNzVvXKGMFLOPSだけ見れりゃいいと思ったからループ回数の部分端折ったけど、
測定時のループ回数が10倍以上違うんだぞ
実行ファイルが違うんだから、そっちは参考にならないよ
0225デフォルトの名無しさん
2014/10/17(金) 23:05:01.81ID:uU5Nj9qhそんな時はsleep入れればCPU使用率が下がって速くなるぞ。
0226デフォルトの名無しさん
2014/10/17(金) 23:30:43.95ID:uNzVvXKGベンチ結果の見方勘違いしてない?
使用率は理研の公式バイナリで相対比較するためのものじゃないの?
0227デフォルトの名無しさん
2014/10/18(土) 00:05:45.09ID:2d9yKbqYでもそこで、「犬」という文字を書き込んだらダメだよ
「犬」という文字に異常に反応する、
基地外がすぐに飛んできて、変なコピペを貼り付けるから
可哀そうにそいつは、いつの頃からか狂ってしまったらしい
0228デフォルトの名無しさん
2014/10/18(土) 00:11:18.71ID:7xxbXr1V> 基地外がすぐに飛んできて、変なコピペを貼り付けるから
それが本当か試してみよう。
犬
http://hayabusa6.2ch.net/test/read.cgi/linux/1413558649/
0229デフォルトの名無しさん
2014/10/18(土) 01:28:56.16ID:fR9c0Td8なんか怖い話みたいだw
0230デフォルトの名無しさん
2014/10/18(土) 15:40:40.04ID:0CGj8uG/0231デフォルトの名無しさん
2014/10/18(土) 16:08:47.23ID:xyIEV5M1アラスカ速報板=エスキモー=イヌイットのことだぞ
0232デフォルトの名無しさん
2014/10/18(土) 16:09:58.26ID:yDqaZQ3r全然来ないじゃない。
嘘つき
0233デフォルトの名無しさん
2014/10/18(土) 17:03:38.78ID:0CGj8uG/0234デフォルトの名無しさん
2014/10/18(土) 23:54:33.21ID:xo2uWsa8殆どのリソースを管理できない欠陥仕様だけど
メモリくらいなら大丈夫だね
0235デフォルトの名無しさん
2014/10/19(日) 00:03:35.73ID:BmB5xxVy内部で投げるのがあるなら
キャッチして処理しろと
0236デフォルトの名無しさん
2014/10/19(日) 00:04:28.20ID:GulnFHAjなんでリソース管理の話になるんだ?
リソース管理するならむしろ
デストラクタで例外をなげちゃだめだろ
0237デフォルトの名無しさん
2014/10/19(日) 00:45:26.47ID:g8fFX5o50238デフォルトの名無しさん
2014/10/19(日) 00:45:41.18ID:0BIe0LWVリソース解放に失敗したとき、例外も投げられず戻り値も無いデストラクタで
どうやって失敗を適切に処置してるの?
それとも、man page で「深刻なプログラミングエラー」って書かれてるような
プログラミングスタイルで良しとしてるわけ?
> http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/close.2.html
> 注意
> close() の返り値のチェックはよく省略されるが、 これは深刻なプログラミングエラーである。
> 前の write(2) 処理に関するエラーが最後の close() のときになって初めて通知される場合がありうる。
> ファイルクローズの際に返り値をチェックしないと、 気付かないうちにデータを失ってしまうかもしれない。
> これは特に NFS やディスククォータを使用した場合に見られる。
0239デフォルトの名無しさん
2014/10/19(日) 01:08:30.38ID:BmB5xxVyunique_ptrのdeleterにlambda渡して
外部スコープの変数にでも
状態を書き込めばいい
まさにraiiの仕組みを使うことになるが
0240デフォルトの名無しさん
2014/10/19(日) 01:17:34.05ID:0BIe0LWVで、あとで状態を一々チェックしてエラーがないか確認すると
古のerrnoと一緒じゃん
0241デフォルトの名無しさん
2014/10/19(日) 01:18:54.48ID:GulnFHAjリソース管理の話だだったよね?
デストラクタで例外を投げられたら、
どういうリソースが管理できるっていうのさ?
エラーメッセージが表示できないって
話ならわかるけどさ
0242デフォルトの名無しさん
2014/10/19(日) 01:23:50.83ID:0BIe0LWVNFSを使っててファイルのcloseに失敗した場合、
その例外をキャッチして、とりあえずローカルファイルに書き出す処理に移行して
最悪データが失われるのを防ぐとか
0243デフォルトの名無しさん
2014/10/19(日) 01:28:44.77ID:BmB5xxVy後はベリファイすりゃそんな処理は
要らないって話にもできるし
そもそも読み込みの場合は必要ない
0244デフォルトの名無しさん
2014/10/19(日) 01:39:13.48ID:GulnFHAjそれはエラーメッセージの表示とは別の話でエラーメッセージを表示したいと
思うならば、その場所でclose()メソッドを呼び出だすもの。
close()メソッドを呼び出すということは
その場所で例外が発生した時に何かの処理をしたいということ。
オブジェクトへの参照を複数持つことを考えればわかるんじゃないかな?
参照が複数ある時、一体いつデストラクタが発生するか?
最後の参照カウンタが無くなった時だ。オブジェクトの参照が複数ある場合
どこにデストラクタの例外処理を書かないといけないのかがわからなくなる。
デストラクタでリソースの解放をするのはいいが、
それは解放忘れが起きないように書くという意味合いが強く
例外が起きるようなリソースの解放はcloseで行うもの。
0245デフォルトの名無しさん
2014/10/19(日) 01:42:22.61ID:GulnFHAjdelete objした時に
デストラクタで例外が発生して
それをキャッチしたいって話をしてるんだよね?
デストラクタで例外が発生した時、
objインスタンスは消えたらダメってことでいいの?
こんなコードを書きたいの?
try {
delete obj;
} catch() {
objからデータ取ってくる
try {
delete obj
} catch() {
どうすりゃいいの?w
}
}
0246デフォルトの名無しさん
2014/10/19(日) 01:57:22.50ID:GulnFHAjコードを脳内でシミュレートしてみたが、
オブジェクトで使ってるリソースどころか
オブジェクト自身のメモリリーク対策だけで大変なことになりそうだw
0247デフォルトの名無しさん
2014/10/19(日) 02:06:08.59ID:BmB5xxVycloseの仕様自体が酷いというのが
正直なところ
他にこんな仕様のリソースってあるの?
0248デフォルトの名無しさん
2014/10/19(日) 02:11:32.13ID:BmB5xxVyみんながエラー対策が万全だからってんじゃなく
あまり対策がされてないのにそれで許されているからというのが実態
まあ本当に大事なデータなら、書き込み正常終了だけでなくベリファイまでするだろうしね。
0249デフォルトの名無しさん
2014/10/19(日) 02:19:56.02ID:GulnFHAjカーネルの仕様であり、
そこまで来るとUnixの基本設計の問題だよ。
Unixはいろんなものをファイルとして
扱えるように設計されている。
0250デフォルトの名無しさん
2014/10/19(日) 02:37:59.59ID:GulnFHAj> closeの仕様自体が酷いというのが
closeの仕様は全然問題ないでしょ。今回の話はリソースの
解放とクローズ処理をごっちゃにしたからいけないのであって。
リソース解放というのはいかなる状態であってもリソースが解放されていればいい。
たとえばリセットもリソース解放の手段の一つ。
それによってデータの書き込みが中途半端なって
データが壊れたとしても、リソースは解放されている。
クローズはクローズ処理。クローズ時には何かの操作を行うものが
あるかも知れない。たとえばCD-Rなんか書き込み完了時に
ファイナライズという処理が必要だったよね。そんな感じ。
クローズしたいならcloseメソッドを呼び出すべきだし、例外はそこでキャッチできる。
デストラクタでクローズしてもいいが、それは念の為に行っているに過ぎない。
デストラクタではリソースの解放さえできればいい。
0251デフォルトの名無しさん
2014/10/19(日) 02:44:59.04ID:5JPwKBvc何のためのバッファだよ
0252デフォルトの名無しさん
2014/10/19(日) 11:24:57.62ID:U9zncy/Oファイルなら毎回flushしる
0253デフォルトの名無しさん
2014/10/19(日) 11:34:13.06ID:XjMCqegx0254デフォルトの名無しさん
2014/10/19(日) 11:52:24.25ID:pRVsX1zF0255デフォルトの名無しさん
2014/10/19(日) 12:00:48.30ID:WiNHWyAn0256デフォルトの名無しさん
2014/10/19(日) 12:06:42.71ID:GulnFHAj他の言語でもデストラクタで例外をだしたらハマるだろうさ。
デストラクタにはこういう問題があるため
デストラクタ自体をなくしている言語が多い。
0257デフォルトの名無しさん
2014/10/19(日) 12:09:02.61ID:BmB5xxVyのが無茶なだけ
javaその他でもファイナライザで
例外出すのは糞だろうに
死ぬか握り潰すかしかない
0258デフォルトの名無しさん
2014/10/19(日) 12:10:50.07ID:WiNHWyAn手法なので、デストラクタで例外を送出するようでは、実現できていないと
考えて良い。
0259デフォルトの名無しさん
2014/10/19(日) 12:12:03.77ID:WiNHWyAn0260デフォルトの名無しさん
2014/10/19(日) 12:12:18.58ID:BmB5xxVyそのわりには例外機構的に
もっと都合の悪いファイナライザが
あるのは何故
0261デフォルトの名無しさん
2014/10/19(日) 12:12:51.25ID:GulnFHAjネタでわざと書いてるのがバレバレだなぁw
0262デフォルトの名無しさん
2014/10/19(日) 12:16:38.93ID:GulnFHAjいや、だからファイナライザもだめなんだって、
都合がわるいだろう?
デストラクタ(もファイナライザ)にはこういう問題があるため
デストラクタ(もファイナライザ)をなくている言語が多い
って書けばよかった?
0263デフォルトの名無しさん
2014/10/19(日) 12:17:56.51ID:XjMCqegxexitの直前でもfreeすべしとか言ってるバカはどうすんだ?
0264デフォルトの名無しさん
2014/10/19(日) 12:18:03.35ID:gVYUQ+UZ0265デフォルトの名無しさん
2014/10/19(日) 12:18:57.83ID:GulnFHAjMET12-J. ファイナライザは使わない
https://www.jpcert.or.jp/java-rules/met12-j.html
こんなドキュメントもあるよ。これはJavaの解決だから
ファイナライザになってるけど、処理の実行タイミング以外の
殆どはデストラクタにも当てはまる話。
0266デフォルトの名無しさん
2014/10/19(日) 12:19:48.49ID:WiNHWyAn事実を書いてるだけだよ。
俺はGCは必要ないと考えてる。
RAII的にGCは無茶だよ。
目標の設定が高すぎて人類に実現できない。
C++的なやり方が、人類の脳みそにとって妥当で、しかも既にRAIIを実現できてる。
今使えるRAII。
それがC++のやり方。
あと、std::unique_ptr<>が基本だと考えると良い。
オブジェクトの実体は必ず一か所に有ると考える。
これで、物事が驚くほど単純になる。
0267デフォルトの名無しさん
2014/10/19(日) 12:20:08.77ID:GulnFHAj死ぬしか無い例外は、当然例外。
これはOSからkillされたのと同じと考える。
だから自分でfreeする必要はない(できないと考える)
0268デフォルトの名無しさん
2014/10/19(日) 12:22:12.96ID:GulnFHAjえっと、今まで話していたのは、
C++でデストラクタでリソース管理するのは
間違いって話なんだけど。
なぜ1980年代後半に登場した言語はすべてGCになったか
わかってる? 30年以上もGCでRAIIできてるのに
今どき無茶とかお前が理解してないだけだってw
0269デフォルトの名無しさん
2014/10/19(日) 12:28:33.48ID:BmB5xxVy異次元での話かなにか?
0270デフォルトの名無しさん
2014/10/19(日) 12:28:41.46ID:WiNHWyAnC++は、オブジェクトが実際に解放される瞬間を自分でコントロールする。
だからこそ、RAIIが可能になる。
Javaの崇高な目標は達成できていない。
「Write once, Runaway.」
実現できてたわ。
0271デフォルトの名無しさん
2014/10/19(日) 12:29:43.39ID:XjMCqegx死ぬしかないのはRAIIという手法の下での制約
free教信者は解放出来ない可能性のあるRAIIを使うべきでは
ないという立場をとらなければいけない
0272デフォルトの名無しさん
2014/10/19(日) 12:32:50.01ID:WiNHWyAnOSによる制限からRAIIが実現できないのであれば、OSから制限を取り除いていくべき。
そういう方向性。
「OSによる制限から実現できないので、RAIIするべきでない」
↑ これバカの考え方。
0273デフォルトの名無しさん
2014/10/19(日) 12:34:31.72ID:WiNHWyAn↑ これは妥当な考え方。
0274デフォルトの名無しさん
2014/10/19(日) 12:35:28.62ID:BmB5xxVyデストラクタが例外投げる状況を
回避して安全にエラー処理可能だと
いうことを>>239で書いたんだが。
errnoみたいなのが嫌なら
中で一時オブジェクトに
例外オブジェクト代入して、
外で例外としてthrowしてしまえばいい話
0275デフォルトの名無しさん
2014/10/19(日) 12:37:32.37ID:GulnFHAj正確に書きなよ。
free教信者は解放出来ない可能性のあるRAIIを使うべきでは
ないという立場をとらなければいけない
と俺(>>271)は考えてる!
0276デフォルトの名無しさん
2014/10/19(日) 12:37:38.15ID:gVYUQ+UZ↑ これ賢いの?
0277デフォルトの名無しさん
2014/10/19(日) 12:38:35.61ID:WiNHWyAn今日も糞言語に勝ってしまった。
0278デフォルトの名無しさん
2014/10/19(日) 12:39:18.86ID:GulnFHAj> C++は、オブジェクトが実際に解放される瞬間を自分でコントロールする。
> だからこそ、RAIIが可能になる。
自分でコントロールするからミスしやすく、
そして自分でコントロールしなくてもRAIIが可能だから
GCが普及したんだよ。
C++で頑張ればRAIIできる!ではなくて、GCある言語ではRAIIは不可能だ。
なぜなら〜 という説明をしないと反論にはならないよ。
やり直し。
0279デフォルトの名無しさん
2014/10/19(日) 12:39:41.42ID:WiNHWyAnメモリーはリークしない。
なぜなら、std::unique_ptr<>が基本だから。
0280デフォルトの名無しさん
2014/10/19(日) 12:52:11.38ID:GulnFHAjメモリの管理がやっとGCに追いついたみたいねw
0281デフォルトの名無しさん
2014/10/19(日) 12:54:23.56ID:XjMCqegxfree教信者のこれまでの発言からそのように演繹される
0282デフォルトの名無しさん
2014/10/19(日) 13:00:05.42ID:GulnFHAj○ free教信者のこれまでの発言からそのように俺は演繹した。俺が間違っているわけがない。
0283デフォルトの名無しさん
2014/10/19(日) 13:11:36.20ID:XjMCqegxたらしいが、異常系はどうすんだよという批判を受けて、「free出来る場合はfreeしな
ければいけない」と教義を修正したらしい。
この教義に従うならばfree出来ない可能性を作り出すRAIIは異端の技法。
また教義の再修正で逃げるのだろうか?
0284デフォルトの名無しさん
2014/10/19(日) 13:36:41.57ID:GulnFHAj何を言ってるんだ?
その理屈ならでデストラクタが呼ばれない強制終了は
すべて異端の技法ってことになるぞ。
ああ、そうかお前RAII教信者だな。
いかなる場合でもRAIIを満たしていなければならないって
考えてるでしょ?w
0285デフォルトの名無しさん
2014/10/19(日) 15:06:16.67ID:WiNHWyAn0286デフォルトの名無しさん
2014/10/19(日) 17:22:06.23ID:/icP5T1kソフトからどうにもできないものをソフトで解決しようと思うのが間違い。
そのケースだと、解放しない派も解放できず解決になってないから。
0287デフォルトの名無しさん
2014/10/19(日) 18:01:39.56ID:/f9ejQX4ゴミありませんか?
0288デフォルトの名無しさん
2014/10/19(日) 18:08:37.15ID:WiNHWyAnRAIIによってスラッシングが起こる → そんなLinuxは捨てなさい。
RAIIによってリソース管理がうまくいかない → そんなJavaは捨てなさい。
0289デフォルトの名無しさん
2014/10/19(日) 18:27:08.55ID:WiNHWyAnGとは何か?ゴミ、あるいはゴキブリである。
0290デフォルトの名無しさん
2014/10/19(日) 19:11:45.71ID:U9zncy/Oいつも悪いわね
庭中に落ちてるゴミ全部持ってって
0291デフォルトの名無しさん
2014/10/19(日) 19:29:19.04ID:GulnFHAjいつも悪いわね
庭中に落ちてるゴキブリを全部手動で回収してもらって。
0292デフォルトの名無しさん
2014/10/19(日) 19:40:21.16ID:8XPMKtntそんなもんだろ。実装にもよるけどnull入れとくだけで再利用して
くれるってのは賢いと思うよ。相互参照なんてGC関係ないしね。
0293デフォルトの名無しさん
2014/10/19(日) 19:42:58.28ID:I8zMPvcx> ゴミありませんか?
いつもご苦労様、そこの >>287 を持っていってちょうだい
0294デフォルトの名無しさん
2014/10/19(日) 19:47:46.94ID:WiNHWyAnユーザーを説得できればいいですね。
Javaと聞いただけで敬遠するユーザーが多いですから。
0295デフォルトの名無しさん
2014/10/19(日) 21:13:16.20ID:gVYUQ+UZ0296デフォルトの名無しさん
2014/10/19(日) 22:52:48.25ID:bsmU9avN0297デフォルトの名無しさん
2014/10/20(月) 00:04:19.51ID:S36xvtyoランタイムに穴が見つかって新しいの入れろってなるとそれのテストも必要になる
javaが嫌われる理由の1つ
0298デフォルトの名無しさん
2014/10/20(月) 05:16:03.26ID:xAo8P4O1身の程わきまえてろ掃いて捨てられるゴミクズが
0299デフォルトの名無しさん
2014/10/20(月) 07:55:13.01ID:6fVQz6mC0300デフォルトの名無しさん
2014/10/20(月) 08:55:32.17ID:jBlrymD4参照が残ってるんで無理っす
0301デフォルトの名無しさん
2014/10/20(月) 09:40:43.49ID:6/LNQkyp0302デフォルトの名無しさん
2014/10/20(月) 10:25:26.65ID:GgWymHXm0303デフォルトの名無しさん
2014/10/20(月) 11:24:54.16ID:F23WCq0oクソグラマーに作らせるとこれだから...
0304デフォルトの名無しさん
2014/10/20(月) 12:22:10.19ID:OXU+d6cz0305デフォルトの名無しさん
2014/10/20(月) 12:28:32.27ID:OXU+d6cz0306デフォルトの名無しさん
2014/10/20(月) 13:06:55.57ID:cRmJ92uN0307デフォルトの名無しさん
2014/10/20(月) 13:10:18.35ID:cRmJ92uN背伸びした厨房のようだよ
省みられるようになって初めて言語を選びたまえ
0308デフォルトの名無しさん
2014/10/20(月) 17:55:33.82ID:OXU+d6cz0309デフォルトの名無しさん
2014/10/20(月) 18:20:00.83ID:4bxYYw/Lファイナライズされずにプログラム終了してしまうこともある。
0310デフォルトの名無しさん
2014/10/20(月) 18:21:30.93ID:4bxYYw/L0311デフォルトの名無しさん
2014/10/20(月) 18:22:49.41ID:4bxYYw/L0312デフォルトの名無しさん
2014/10/20(月) 19:23:32.39ID:eIVQLy/dcloseのエラーを握り潰して無かったことにする実装になってるんだから、
エラーなんて無視すりゃいいんだよ
0313デフォルトの名無しさん
2014/10/20(月) 19:43:44.01ID:4QGk34Mlだから、"閉じる"処理とオブジェクト削除処理は
分けて考えないとダメなんだよ。
閉じるにかからわず、処理ってのはエラーを返すことがある。
そのエラーに対応するためにC++であってもデストラクタは使えない。
オブジェクト削除処理はエラーにならない。もう使わないとされたものを
削除するだけだからね。
オブジェクト削除時(つまりC++のデストラクタやファイナライズ)で閉じる処理を
するのは構わないし、その処理に依存しても構わないんだが、
それは、オブジェクト削除時のエラーを無視してもいい時だけ。
閉じる処理のエラーやその他、ユーザーへのレスポンスが必要なときは
明示的に閉じるを行うのが常識。
オブジェクトっていうのは閉じている(リソースは解放されている)が
インスタンスは生きているという状態を持たないといけないんだよ。
0314デフォルトの名無しさん
2014/10/20(月) 19:55:19.46ID:4bxYYw/L0315デフォルトの名無しさん
2014/10/20(月) 20:26:13.01ID:6fVQz6mCわざとやってるのかしら
0316デフォルトの名無しさん
2014/10/20(月) 20:26:51.72ID:eIVQLy/d例外が発生しないか、例外を無視できるものに限られる
0317デフォルトの名無しさん
2014/10/20(月) 20:38:30.66ID:4bxYYw/Lエラー処理や例外処理できないと短絡する脳は大丈夫ですか?
0318デフォルトの名無しさん
2014/10/20(月) 20:47:24.08ID:4bxYYw/L例外処理で例外が発生した場合それに対する例外処理を作ればいい、そうやって永遠にネストしつづける心配なんてない。
0319デフォルトの名無しさん
2014/10/20(月) 20:50:43.61ID:KGoWPJoA幻のメリットと引き換えに機械的catchの地獄がまっとるんや
0320デフォルトの名無しさん
2014/10/20(月) 21:27:46.95ID:/fOSUrUDその素晴らしい方法でC++標準ライブラリを救ってやれよ
closeを華麗に握り潰すクソ仕様になってんぞ
0321デフォルトの名無しさん
2014/10/20(月) 22:07:03.10ID:XrE7a2ruGC時に発生するので通常の方法だとcatch不可
0322デフォルトの名無しさん
2014/10/21(火) 20:16:50.04ID:pjN8ZUY+0323デフォルトの名無しさん
2014/10/21(火) 20:25:58.63ID:GzwA6HkO一方で非同期プログラミングは例外との相性がウンコ
0324デフォルトの名無しさん
2014/10/21(火) 20:29:08.25ID:52vVR+8/ぶくぶく仕様が太っていくのがC++なんだな
0325デフォルトの名無しさん
2014/10/21(火) 20:32:42.62ID:UehLHyChC++でGCなくても大丈夫だってわかるんだよ。
taro-nishinoの日記: 右辺値参照の簡単入門
http://slashdot.jp/~taro-nishino/journal/506859
右辺値参照の簡単入門
2008年3月10日 Howard E. Hinnant, Bjarne Stroustrup, Bronek Kozicki
要約
右辺値参照はC++言語の小さな拡張である。右辺値参照はプログラマに、論理的に不必要なコピーの回避及び完全転送関数を与える。
それらは、何よりも高パフォーマンスでより強靭なライブラリの設計を支援することを意味する。
始めに
このドキュメントは、新しいC++言語のフィーチャー、右辺値参照の簡単なツアーを与える。完全な論及と言うより、
簡単なチュートリアルである。詳細は、参考文献を見られたい。
右辺値参照
右辺値参照は、C++の従来の参照と非常によく似た合成型である。これらの2つの型をよく区別するために、
C++の従来の参照を左辺値参照と呼ぶ。参照という言葉が使用される時、両方の参照を言及する。つまり、左辺値参照と右辺値参照。
左辺値参照は、ある型の後に&を置くことによって形成される。
A a;
A& a_ref1 = a; // 左辺値参照
右辺値参照は、テンポラリ(右辺値)にバインド出来ることを除いて、左辺値参照と全く同様に振舞う一方で、
(非コンスト)左辺値参照は右辺値にバインド出来ない。
A& a_ref3 = A(); // Error!
A&& a_ref4 = A(); // Ok
0326デフォルトの名無しさん
2014/10/21(火) 20:33:18.13ID:UehLHyCh右辺値参照と左辺値参照の組合せが、容易にmoveセマンティクスをコードするために必要なことが判明する。
右辺値参照はまた、C++で未だ未解決の問題、完全転送を成就するために使用出来る。
偉くないプログラマの観点から言えば、右辺値参照から得るものは、より一般的で良い実行速度のライブラリである。
Moveセマンティクス
まがい物のコピーを削減する
コピーは高価になり得る。例えば、std::vectorに対してv2=v1は典型的に関数呼出し、
メモリアロケーション、そしてループを伴なう。vectorの2つのコピーを必要とする処では勿論容認出来るが、
多くの場合そうではない。私達はよくvectorを或所から別の場所へとコピーするが、それは古いコピーを上書きするために行う。以下を考えよう。
template <class T> swap(T& a, T& b)
{
T tmp(a); // 今や二つのaコピーを持つ
a = b; // 今や二つのbコピーを持つ
b = tmp; // 今や二つのtmp(aでもある)コピーを持つ
}
しかし、私達はa又はbの何のコピーも欲しくなかったし、それらを交換したかったのだ。やり直し。
template <class T> swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}
0327デフォルトの名無しさん
2014/10/21(火) 20:33:54.27ID:UehLHyCh。そして、vectorに対しては、すべての要素をコピーする必要を避けるように、
move()はその引数をゼロ容量のvectorにすることが当然期待される。言い換えれば、移動(move)は潜在的に破壊的読込みである。
この特別な場合においては、私達は特化によってswapを最適化出来たであろう。
しかし、削除又は更新の直前に、大きなオブジェクトをコピーするすべての関数を特化出来ない。それは手の施しようがないのだ。
右辺値参照の最初の仕事は、冗長性又はランタイムオーバヘッド無しでmove()を実装させることである。
move
move関数は実際は殆ど何もしない。moveがすることは、左辺値又は右辺値の参照を受けて、
コピーコンストラクタを走らせずに右辺値を戻すことだ。
template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
return a;
}
それらの引数が左辺値か右辺値かどうかについて、主要関数をオーバロードすることはユーザコードの責任である
(例えば、コピーコンストラクタと代入演算子)。引数が左辺値である時、その引数はコピーされなくてはならない。引数が右辺値である時、安全に移動されるであろう。
左辺値/右辺値におけるオーバロード
リソースを所有し、コピーセマンティクス(コピーコンストラクタと代入)を与える簡単なハンドルクラスを考えよう。
例えば、clone_ptrはポインターを所有し、コピー目的のためclone()を呼出してよい。
0328デフォルトの名無しさん
2014/10/21(火) 20:34:28.66ID:UehLHyChたったこれだけのことを知っていれば
初心者でもGCがなくても大丈夫だって
理解できるだろう。
0329デフォルトの名無しさん
2014/10/21(火) 20:38:22.37ID:GzwA6HkO豆腐の角に頭ぶつけて死ねよ
0330デフォルトの名無しさん
2014/10/21(火) 20:48:48.64ID:M5Ku/KlJそれでエンドユーザーが
コード書くのが楽になって
しかもより速度が出るのだから
良いことじゃないの?
それに、gcあるjavaやc#も言語仕様が
肥大化しているのは同じようなものじゃね。
javaなんて他の言語でありがちな新機能を加えてみようとするけど、初期の設計思想からのしがらみで、不完全な形のウンコになるのが恒例になってきている。
genericsとか、try with resourcesとか
lambdaも微妙だし
0331デフォルトの名無しさん
2014/10/21(火) 20:56:11.60ID:zIk7KIVl他の言語が1レスで説明できる程度ならば
C++だと説明に100レスはかかるからな。
>>325-327みろよ。
これでまだ一部だからな。
しかも基礎知識が十分にある人用。
人間に負担をかけるようなものは
時代の流れに逆行してるよ。
0332デフォルトの名無しさん
2014/10/21(火) 20:57:01.24ID:zIk7KIVlこれらはじつにシンプルな機能ですね。
簡単に理解できる。
0333デフォルトの名無しさん
2014/10/21(火) 21:05:07.41ID:TjhYfBl90334デフォルトの名無しさん
2014/10/21(火) 21:12:12.60ID:pjN8ZUY+って感じになってくる。
0335デフォルトの名無しさん
2014/10/21(火) 21:12:54.53ID:lvwLlp6ztaro-nishinoの日記: 右辺値参照の簡単入門
http://slashdot.jp/~taro-nishino/journal/506859
右辺値参照の簡単入門
2008年3月10日 Howard E. Hinnant, Bjarne Stroustrup, Bronek Kozicki
要約
右辺値参照はC++言語の小さな拡張である。右辺値参照はプログラマに、論理的に不必要なコピーの回避及び完全転送関数を与える。
それらは、何よりも高パフォーマンスでより強靭なライブラリの設計を支援することを意味する。
始めに
このドキュメントは、新しいC++言語のフィーチャー、右辺値参照の簡単なツアーを与える。完全な論及と言うより、
簡単なチュートリアルである。詳細は、参考文献を見られたい。
右辺値参照
右辺値参照は、C++の従来の参照と非常によく似た合成型である。これらの2つの型をよく区別するために、
C++の従来の参照を左辺値参照と呼ぶ。参照という言葉が使用される時、両方の参照を言及する。つまり、左辺値参照と右辺値参照。
左辺値参照は、ある型の後に&を置くことによって形成される。
A a;
A& a_ref1 = a; // 左辺値参照
右辺値参照は、テンポラリ(右辺値)にバインド出来ることを除いて、左辺値参照と全く同様に振舞う一方で、
(非コンスト)左辺値参照は右辺値にバインド出来ない。
A& a_ref3 = A(); // Error!
A&& a_ref4 = A(); // Ok
0336デフォルトの名無しさん
2014/10/21(火) 21:14:55.91ID:pjN8ZUY+そんなことすらわからなくなってしまったわ。
慣れって怖いね。
まあ、右辺値参照はすごいわ。
std::shared_ptr<>すら、どう使えばいいのかわからんくなってきた。
0337デフォルトの名無しさん
2014/10/21(火) 21:18:14.60ID:M5Ku/KlJまあシンプルと言えばそうだな。
すぐにダメさ加減が理解できるところが。
try with resourcesは単なるスコープ変数+デストラクタで出来る程度のことを
面倒くさく書くだけの機能だし
genericsはあるだけマシな程度の
玩具みたいなものだものね。
lamdaの外側スコープの変数参照に対する
制限もギャグかなにかか?
finalつけなくてもokだけど事実上final
仮引数名が外の変数名と被っちゃダメとか
0338デフォルトの名無しさん
2014/10/21(火) 21:18:51.67ID:pjN8ZUY+全部参照渡しにしたら速くなり、しかも単純になるってアイデアじゃないかと思うんだよ。
プリミティブはコピーするのも良い考えだよね。
参照渡しになると、じゃあ実体はどこに有るの?ってなってGC必須になるよね。
でも右辺値参照のおかげで、Javaが一気に陳腐に見えてきた。
0339デフォルトの名無しさん
2014/10/21(火) 21:21:01.69ID:pjN8ZUY+しれないね。
相変わらずコストは気になるけど。
0340デフォルトの名無しさん
2014/10/21(火) 21:22:33.78ID:pjN8ZUY+これはかなり使える。
C++11イイネ!
0341デフォルトの名無しさん
2014/10/21(火) 21:34:44.72ID:txf2w5nHtaro-nishinoの日記: 右辺値参照の簡単入門
http://slashdot.jp/~taro-nishino/journal/506859
右辺値参照の簡単入門
2008年3月10日 Howard E. Hinnant, Bjarne Stroustrup, Bronek Kozicki
要約
右辺値参照はC++言語の小さな拡張である。右辺値参照はプログラマに、論理的に不必要なコピーの回避及び完全転送関数を与える。
それらは、何よりも高パフォーマンスでより強靭なライブラリの設計を支援することを意味する。
始めに
このドキュメントは、新しいC++言語のフィーチャー、右辺値参照の簡単なツアーを与える。完全な論及と言うより、
簡単なチュートリアルである。詳細は、参考文献を見られたい。
右辺値参照
右辺値参照は、C++の従来の参照と非常によく似た合成型である。これらの2つの型をよく区別するために、
C++の従来の参照を左辺値参照と呼ぶ。参照という言葉が使用される時、両方の参照を言及する。つまり、左辺値参照と右辺値参照。
左辺値参照は、ある型の後に&を置くことによって形成される。
A a;
A& a_ref1 = a; // 左辺値参照
右辺値参照は、テンポラリ(右辺値)にバインド出来ることを除いて、左辺値参照と全く同様に振舞う一方で、
(非コンスト)左辺値参照は右辺値にバインド出来ない。
A& a_ref3 = A(); // Error!
A&& a_ref4 = A(); // Ok
0342デフォルトの名無しさん
2014/10/21(火) 22:15:43.39ID:oEWCieDh複数の参照が必要な場合はshared_ptrを使い
循環参照になってしまう場合はweak_ptrを使い
ライブラリやAPI等が生ポインタを要求している場合は仕方なく生ポインタを使う
うん、GCでいいや
0343デフォルトの名無しさん
2014/10/21(火) 22:22:52.19ID:M5Ku/KlJobjectは全部参照渡しでconstもつけられないから、ちょっと貸しただけのつもりでも
中身を書きかえられてしまうとか
完全にジャイアンされてしまうとかあり得る。
0344デフォルトの名無しさん
2014/10/21(火) 22:34:33.95ID:pjN8ZUY+右辺値参照を基本にしたらいいよ。
0345デフォルトの名無しさん
2014/10/21(火) 22:45:29.46ID:pjN8ZUY+右辺値参照が良いですよ?
0346デフォルトの名無しさん
2014/10/21(火) 23:02:13.54ID:n/XE5pFT0347デフォルトの名無しさん
2014/10/21(火) 23:31:40.40ID:txf2w5nH> javaって特にobjectの所有権の概念が薄いよね。
所有権の概念を持ってる言語って
他に何がありますかね?
多数派だと思っていた常識が
実は少数派どころかC++にしかないと
知ったらびっくりするかな?
GCが無いせいで、そういう必要性が限りなく
少ない概念が必要になるんだよ。
0348デフォルトの名無しさん
2014/10/21(火) 23:35:47.65ID:n/XE5pFT一旦はGC導入したけどARCの方が気に入ってやめちゃった感じ。
0349デフォルトの名無しさん
2014/10/21(火) 23:40:34.55ID:HewQOdOv0350デフォルトの名無しさん
2014/10/21(火) 23:45:03.36ID:ZF7bMXxc世の中には右辺値参照とGCを併せ持つ言語もあるし、constな参照型のオブジェクトを扱える言語もあるよ
0351デフォルトの名無しさん
2014/10/21(火) 23:50:08.01ID:0vfesyL/(すべての所有者が手放した場合に破棄される)も含めるかで話が違うと思うが、Objective-Cは
Javaと同じだな。
0352デフォルトの名無しさん
2014/10/22(水) 00:21:22.85ID:Oth616WkJavaは最後の所有者が手放したらそのうち破棄される。
0353デフォルトの名無しさん
2014/10/22(水) 00:27:42.51ID:LPL6SAIs0354デフォルトの名無しさん
2014/10/22(水) 00:28:36.04ID:wBkRpUr8実際にいつ破棄されるかってのはあんま関係ない。
0355デフォルトの名無しさん
2014/10/22(水) 00:34:29.19ID:LPL6SAIsそれで良いけど
0356デフォルトの名無しさん
2014/10/22(水) 00:52:57.74ID:OtEE3/Y/0357デフォルトの名無しさん
2014/10/22(水) 00:56:10.48ID:Oth616Wk0358デフォルトの名無しさん
2014/10/22(水) 00:59:41.65ID:OtEE3/Y/Javaには有りません。
0359デフォルトの名無しさん
2014/10/22(水) 01:01:07.63ID:Oth616Wkおまえアホだろ
0360デフォルトの名無しさん
2014/10/22(水) 01:03:20.78ID:OtEE3/Y/作れば有ると言いたいのかもしれませんが、作ってもありません。
勉強しましょう。
0361デフォルトの名無しさん
2014/10/22(水) 01:05:42.55ID:Oth616Wk世の中の全員がC++で右辺参照を使えっていう主張なの?
0362デフォルトの名無しさん
2014/10/22(水) 01:11:21.42ID:iNJY0L1E0363デフォルトの名無しさん
2014/10/22(水) 01:13:51.01ID:OtEE3/Y/OOPは実はスコープが非常に重要だったってことですかね。
寿命のハッキリしないオブジェクトは実はとても邪悪なものだったのです。
これは実際に使ってみるまで判りませんでした。
GCはとても良いもののように思えるかもしれませんが、実は本質的に間違ったもの、
邪悪なものです。
C#は、構造体とクラスが有るので、もしかすると右辺値参照を取り入れることが
出来るのかもしれません。
Javaは絶望的です。
おそらく、右辺値参照の概念が広まるとともに、GCがJavaの欠点と知られるように
なるでしょう。
使ってみるとわかる種類の問題です。
0364デフォルトの名無しさん
2014/10/22(水) 01:17:06.54ID:/tqtsn/0せっかくのスタックをほとんど使わないとかスコープを超えて存在しないオブジェクトが無いとか
凄い話だ。
0365デフォルトの名無しさん
2014/10/22(水) 01:18:30.96ID:/tqtsn/0長い年月祟られそうだ
0366デフォルトの名無しさん
2014/10/22(水) 01:22:58.14ID:zNS2c65g動かす気ない人たちはどう...
0367デフォルトの名無しさん
2014/10/22(水) 01:36:44.78ID:OtEE3/Y/設計のマナーが変わると思います。
「Javaを使うやつは設計ができない」と言われる日が来るかもしれません。
Javaを使っていたというと「is a」「has a」と言われるようになるかもしれません。
OOPの基本中の基本だったはずのことが、なぜかできていなかったのです。
自分でも驚きです。
相互参照のほとんどすべては、設計上引き起こされるのではなく、パフォーマンス上
起きていたのです。
本当に驚きです。
もちろん、すべての事象がOOPで片付くわけではありません。
しかし、適用範囲は意外と広く、基本に忠実に設計できるのです。
そう、右辺値参照が有れば。
0368デフォルトの名無しさん
2014/10/22(水) 01:39:03.48ID:iNJY0L1E0369デフォルトの名無しさん
2014/10/22(水) 01:48:52.63ID:/tqtsn/0C++ではポインタにNULLを渡すのとdeleteするのでは全く意味が違う。
GC派はこれを無視して議論しろと迫る。
「小さな親切大きなお世話」がGCなのは良いとしてGCから逃れられない言語仕様てのは怖い
0370デフォルトの名無しさん
2014/10/22(水) 01:55:08.30ID:OtEE3/Y/0371デフォルトの名無しさん
2014/10/22(水) 02:04:29.48ID:iNJY0L1E0372デフォルトの名無しさん
2014/10/22(水) 02:31:44.13ID:iNJY0L1E0373デフォルトの名無しさん
2014/10/22(水) 02:33:39.24ID:iNJY0L1E0374デフォルトの名無しさん
2014/10/22(水) 02:47:20.92ID:iNJY0L1E0375デフォルトの名無しさん
2014/10/22(水) 02:49:41.66ID:iNJY0L1E0376デフォルトの名無しさん
2014/10/22(水) 07:33:21.00ID:8DqHr0em0377デフォルトの名無しさん
2014/10/22(水) 08:01:42.49ID:4UXHaNsm0378デフォルトの名無しさん
2014/10/22(水) 08:56:42.16ID:iNJY0L1E大小様々な骸骨兵の蠕く神殿の石柱の上になりゆきで潜んでいたら
ついに発見されて石柱の下に骸骨兵や骸骨隊長みたいなのが
うようよ集まってきた夢みた。恐かった。
0379デフォルトの名無しさん
2014/10/22(水) 09:17:42.77ID:iNJY0L1Eしかしあれに自分の居る石柱を倒されたら終わり。
巨大骸骨兵は水色でおしりが妙に筋肉質だったのが変だった。
0380デフォルトの名無しさん
2014/10/22(水) 12:09:30.08ID:TEpqRTO4間違える可能性が低い人間にとって易しい言語になる。
妥協を知らないといろんなことが出来る代わりに
いろんな知識が必要とされ、あれ使うときには
これに気をつけろ!みたいな罠だらけのC++という言語になる。
0381デフォルトの名無しさん
2014/10/22(水) 20:20:20.07ID:/tqtsn/00382デフォルトの名無しさん
2014/10/22(水) 20:21:41.88ID:MSiUWjkH0383デフォルトの名無しさん
2014/10/22(水) 20:25:31.50ID:MSiUWjkH0384デフォルトの名無しさん
2014/10/22(水) 22:53:08.64ID:OtEE3/Y/0385デフォルトの名無しさん
2014/10/23(木) 08:41:03.22ID:TE8bWo7Y集落を挟んで谷のように切り立った崖の上を歩いていたら、いつのまにか
手にもっているのが、書類の入った東北大学と印字されている紙袋に変わっていた夢をみた。
細い道は峰を続いており、落ちそうな崖にさしかかったとき突風が書類をまき散らした。
一部崖の下に舞っていってしまった。残りを拾おうとしたとき60〜70歳くらいのおじさん達が
やってきて拾うのを手伝ってくれた。気を付けるんだよ、さっき学生さんが滑落したんだ
これがその遺品だと手渡された紙袋には名古屋大と印字されてあった。
0386デフォルトの名無しさん
2014/10/23(木) 08:44:01.07ID:TE8bWo7Y0387デフォルトの名無しさん
2014/10/23(木) 09:45:40.75ID:eDVkHXcG0388デフォルトの名無しさん
2014/10/23(木) 10:02:39.25ID:trygFlOB0389デフォルトの名無しさん
2014/10/23(木) 12:51:47.53ID:aKdUNZYR0390デフォルトの名無しさん
2014/10/23(木) 15:43:05.74ID:eDVkHXcG0391デフォルトの名無しさん
2014/10/25(土) 12:59:26.62ID:Hk50cfI1並列処理にGCは向かん
瞬間高負荷を捌くバックエンドでGCとか爆弾を抱えて運用するようなもの
システムなら帯域を制限、負荷を分散、リクエストを遅延させる回避もあるが、GCを保護する目的にやることじゃない
だが世はJava大好きばかり
大学教授は、ベンダー依存が大嫌いだから
0392デフォルトの名無しさん
2014/10/25(土) 17:23:52.81ID:OnPOpk6vコンパクションが必要なほどメモリを使うのなら、メモリプールの
割り当てを増やすとか64bit化するとか全体を見渡した対策が必要。
0393デフォルトの名無しさん
2014/10/25(土) 19:45:41.19ID:dnEj8ZnLPCなんて今はそうそう買い替える代物じゃないし
0394デフォルトの名無しさん
2014/10/25(土) 22:36:33.73ID:2ar+1gMh推奨してた奴は反省するべき。
反省文を提出すること。
↓
0395デフォルトの名無しさん
2014/10/25(土) 23:09:58.00ID:YSa1/4oe0396デフォルトの名無しさん
2014/10/25(土) 23:39:48.32ID:baN3kQAeGCは失敗だった。
やはりメモリ管理を自分でさせた方がいい。
そうすれば「お前こんなことともできんの?」って
初心者をいびり倒せる。
最近のものは軟弱だ。機械に頼って楽をしようとする。
俺が若い頃はな。って自慢できる。
自動化に頼る奴は馬鹿だ。
世の中からソフトウェアなんて無くなってしまえ。
0397デフォルトの名無しさん
2014/10/25(土) 23:40:59.74ID:NNwyd4kSGCの主目的ってコンパクションじゃないの?
0398デフォルトの名無しさん
2014/10/26(日) 00:02:08.63ID:1DpED48uその程度の理解しかないからおまえは馬鹿なんだ。
0399デフォルトの名無しさん
2014/10/26(日) 00:19:13.15ID:ZGigf69pなんで?deleteの代替としての自動解放と比べたらコンパクションの方が複雑な問題だと思うけど
0400デフォルトの名無しさん
2014/10/26(日) 00:27:35.56ID:USY7r1W5そんなに必要か?
余程汚いメモリの使い方しない限り
動き続けるプロセスでも
コンパクションが必要なくらいフラグメンテーションが進むなんて起こらないだろ
例え仮想アドレスが32bitだったとしても
0401デフォルトの名無しさん
2014/10/26(日) 00:38:00.18ID:ZGigf69p汚いメモリの使い方しても断片化を解消してくれるのが有用なんじゃない?
こういう便利機能って学習コストの低減が支持されてるんだと思うし
0402デフォルトの名無しさん
2014/10/26(日) 00:46:18.18ID:GM7L1ZbePCの方は実はそんなに問題にならんのよ。 経験則としてマメにプログラムを
終了して、帰宅時にはPC落としてというのが習慣づいているから。
問題なのがサーバー側のプログラムでweb系がカジュアルになりすぎて、
とりあえず動けばいいやっていうのと、書いているのが考えている以上に
プログラムが生存し続けてというのが2000年辺りから今まで続いてる。
それとは別に最近だとモバイル系のアプリも再起動どころかアプリを終了
するような使い方がされないから生存し続けて問題になる。 モバイルは
CPU強化やメモリ盛ったりという回避策も使えない。
次はウェアラブルだのIoTだのさらにリソースが限られたものの上に作る
必要が出てくるわけで、どうなるんだろうねえって楽しみな部分でもある。
0403デフォルトの名無しさん
2014/10/26(日) 02:17:45.98ID:xfzAwmqmメモリ使いすぎで突然メモリ取得出来なくなってアプリが落ちるから
0404デフォルトの名無しさん
2014/10/26(日) 03:52:18.54ID:wpPYehVd0405デフォルトの名無しさん
2014/10/26(日) 05:08:24.04ID:Fr1ghew10406デフォルトの名無しさん
2014/10/26(日) 10:48:24.15ID:8S4QBfQCモバイルアプリってそんなんなのか
素人に毛が生えたようなのが群がってるようだがそれで常駐する奴つくってるのか
こわいわ
0407デフォルトの名無しさん
2014/10/26(日) 10:58:16.34ID:cDCVTwSzGCがないとメモリコンパクションは不可能なんだよな。
ポインタというメモリアドレスを直接参照しているから
移動できない。
0408デフォルトの名無しさん
2014/10/26(日) 11:11:48.86ID:qbiJxD8n少ないメモリを効率的に利用する工夫だったが、今じゃ移動コストが見合わんだろうな。
コピーGCと比べてどうなのかはわからんが。
0409デフォルトの名無しさん
2014/10/26(日) 11:15:49.62ID:ZGigf69p不可能って事はないが
そもそもGCのある言語のランタイムもGCのない言語で作られてるわけで
CにもGCのライブラリあるし
0410デフォルトの名無しさん
2014/10/26(日) 11:18:01.23ID:7f0LCvPS不要なんじゃないの?
仮想メモリ使ってるわけで、ページ単位(4KBかな?)で
OSが物理メモリを再配置しているわけだから
コンパクションなんかしなくても適当に再配置してくれるでしょ?
もちろん4KBの範囲内はごちゃごちゃするだろうけどさ。
0411デフォルトの名無しさん
2014/10/26(日) 11:20:53.20ID:e3VIJFo+そうだね。不可能じゃないね。
GCがなくてもメモリアドレスをハンドルで扱っているならば可能。
C/C++のようにポインタがメモリアドレスになってる場合は不可能。
0412デフォルトの名無しさん
2014/10/26(日) 11:30:10.36ID:wm4FrzeJキミ、議論に参加できるだけの知識を蓄えてから出直しなさい。
0413デフォルトの名無しさん
2014/10/26(日) 11:31:19.95ID:eAcs35DC0414デフォルトの名無しさん
2014/10/26(日) 11:31:43.48ID:e3VIJFo+なにか言い返したいなら、言い返しなよ(笑)
0415デフォルトの名無しさん
2014/10/26(日) 12:18:21.71ID:CRv5XK0J0416デフォルトの名無しさん
2014/10/26(日) 12:33:43.41ID:8S4QBfQCOSが手を出せるのはプロセス単位でザックリ扱う時だけ
0417デフォルトの名無しさん
2014/10/26(日) 12:36:39.76ID:xfzAwmqm細かくメモリ取得しまくるとページが足りなくなるんだが?
0418デフォルトの名無しさん
2014/10/26(日) 12:53:59.59ID:xfzAwmqmWindowsも昔はGlobalAllocで移動可能メモリやってたね
64k個しかハンドル使えなかったが
0419デフォルトの名無しさん
2014/10/26(日) 13:02:05.04ID:wm4FrzeJ意味わからないなら引っ込んでなよ。
0420デフォルトの名無しさん
2014/10/26(日) 13:04:44.29ID:eoLX8RNkwin16 でも globalAlloc() ではまずハンドルget だったね
0421デフォルトの名無しさん
2014/10/26(日) 13:05:55.62ID:eoLX8RNkアプリのメモリ空間上で断片化が進むとどうしようもない
0422デフォルトの名無しさん
2014/10/26(日) 13:19:18.40ID:xfzAwmqmwin16なんてあったのか。Visual C++のバージョンはいくつだ??
0423デフォルトの名無しさん
2014/10/26(日) 13:22:34.04ID:e3VIJFo+言い返したいなら言い返しなよw
0424デフォルトの名無しさん
2014/10/26(日) 13:23:09.26ID:eAcs35DC全く議論に参加できてないおまえが滑稽なんだけどなw
0425デフォルトの名無しさん
2014/10/26(日) 13:26:57.29ID:q8gyx8FDそんな適当な性格で、よくプログラマーなんてやってられるなwww
0426デフォルトの名無しさん
2014/10/26(日) 13:32:33.78ID:wm4FrzeJ意味わからないなら引っ込んでなよ。
>>424
園児の議論に参加しろと。w
0427デフォルトの名無しさん
2014/10/26(日) 13:43:51.72ID:eoLX8RNkMS-VC++ なら 1.5 か‥
Windows3.1 の世界だね
0428デフォルトの名無しさん
2014/10/26(日) 13:51:53.99ID:xfzAwmqmWindows3.1の頃か……ウチのマシンではまだ重かったから使って無かったな
ちなみに使い出したのはWindows95からで、Visual C++4.0だ
0429デフォルトの名無しさん
2014/10/26(日) 13:53:58.12ID:8S4QBfQC0430デフォルトの名無しさん
2014/10/26(日) 14:07:57.66ID:xfzAwmqmその頃はまだ大学生で、学校のTurbo C++を使ってた
0431デフォルトの名無しさん
2014/10/26(日) 14:23:21.52ID:P2vb82Ou0432デフォルトの名無しさん
2014/10/26(日) 14:33:57.93ID:uXBn6mUwとは言われないようになったしGCもそうなるだろ
0433デフォルトの名無しさん
2014/10/26(日) 14:48:36.61ID:xfzAwmqmPCも進化が止まったし、まだ十年以上は大丈夫かと
0434デフォルトの名無しさん
2014/10/26(日) 15:05:00.62ID:q8gyx8FD画期的な概念すらまだ出てきてない事だし
0435デフォルトの名無しさん
2014/10/26(日) 15:11:16.97ID:xfzAwmqm0436デフォルトの名無しさん
2014/10/26(日) 16:01:26.94ID:eoLX8RNk0437デフォルトの名無しさん
2014/10/26(日) 16:51:35.62ID:1Oyy5cGIそして意外と解放できないメモリはヒープじゃなく肥大化したスレッドスタックだったり
0438デフォルトの名無しさん
2014/10/26(日) 18:08:28.34ID:xfzAwmqmコンパイラをメモリ上だけで作り上げる場合には、未だにコンパクションは必要だ
0439デフォルトの名無しさん
2014/10/26(日) 18:11:50.30ID:xfzAwmqm単にMicrosoftや任天堂が自爆し倒してるだけじゃん、フツーに作ればいいのにフツーに作らないから
0440デフォルトの名無しさん
2014/10/26(日) 18:33:18.76ID:xfzAwmqm数は削られたけどな!
0441デフォルトの名無しさん
2014/10/27(月) 00:07:28.86ID:26DZENrGお前のほうが園児じゃねーかw
レスした以上で参加したことになる。
参加した以上、なにも言い返せないということは
他の人には、こいつ何も言い返せねーなとしか思われない。
0442デフォルトの名無しさん
2014/10/27(月) 14:22:02.63ID:ZMK2MaLm0443デフォルトの名無しさん
2014/10/27(月) 14:34:25.27ID:40zHC+/0お前も参戦したのかw
0444デフォルトの名無しさん
2014/10/27(月) 17:01:24.37ID:JXLo76qt0445デフォルトの名無しさん
2014/10/27(月) 17:21:33.63ID:LftTpzNV0446デフォルトの名無しさん
2014/10/27(月) 20:42:58.32ID:m/3fqmB1念の為に言っておくと、フラグメントを起こす原因は
deleteであってnewじゃないぞ。
0447デフォルトの名無しさん
2014/10/27(月) 21:04:58.71ID:LftTpzNV0448デフォルトの名無しさん
2014/10/27(月) 22:04:34.12ID:Ciot4KaL誤 他の人には、こいつ何も言い返せねーなとしか思われない。
正 園児は、こいつ何も言い返せねーなと思う。
0449デフォルトの名無しさん
2014/10/28(火) 02:12:35.58ID:3/HAAYc30450デフォルトの名無しさん
2014/10/28(火) 02:35:26.24ID:s9KkoS5hばかだろお前
0451デフォルトの名無しさん
2014/10/28(火) 03:17:45.48ID:Z7Ne2Ojx0452デフォルトの名無しさん
2014/10/28(火) 03:19:16.73ID:3/HAAYc3どう見ても馬鹿はお前。
論理的に考えろよ。
0453デフォルトの名無しさん
2014/10/28(火) 06:00:06.29ID:M6wc9Z1l特殊な用途で外部断片化を気にする必要が有る場合、記憶管理を自分で
行えば良い。
こういった特殊な用途でGCが役に立つかといえば、それもない。
外部断片化を気にかける必要が有る用途では、GCそのものが避けられる。
なぜなら、外部断片化が気になるのは、大きな領域を頻繁にしかも大量に
取得解放する場合だから。
この用途でGCは、まさに嫌われる。
右辺値参照が一般化するとGCは時代遅れになる。
0454デフォルトの名無しさん
2014/10/28(火) 06:08:58.71ID:M6wc9Z1l「コピーGCでは、コンパクションが行われるので有利」
イイエ、外部断片化を避けるためにコピーを行うのはAUTOです。
外部断片化を避けなければならないのは、大きな領域を頻繁に大量に取得解放するからです。
この時コピーによるGCを行えばどうなるか想像してください。
「マークアンドスイープならコピーを行わないですむ」
その通りですが、コンパクションは行われないので、余計な仕事が増えた分、GCを
行わないほうが有利です。
「すでに両方の利点を合わせた世代別GCが主流になっている」
イイエ、この場合、両方の欠点を併せ持つことになってしまいます。
良く考えてみてください。
0455デフォルトの名無しさん
2014/10/28(火) 06:23:47.76ID:kbKKW2zh0456デフォルトの名無しさん
2014/10/28(火) 06:42:13.22ID:Ao3oXbnDでもさ、一番重要なのはGCを使わないと
コンパクションすらできないってことだと思うんだが。
工夫すれば断片がないように出来るんです
という反論にしいする反論は
GCでも同じことをすればば断片がないように出来るんです。
0457デフォルトの名無しさん
2014/10/28(火) 06:45:07.67ID:Ao3oXbnD○という反論にたいする反論は
まあ、一番効率がいいのは、アルゴリズムを工夫して
断片化しないようにする + それでも断片化してしまった場合に備えて
"断片化がひどい場合のみ" 断片化を解消するアルゴリズムを取り入れる。
断片化っていうのは、全部一度にする必要はないから
少しづつ移動すればいいだけだし。デフラグと一緒だね。
これが出来るのはGCがある言語だけだろう。
0458デフォルトの名無しさん
2014/10/28(火) 06:47:57.55ID:7RgMAP3p解説plz
0459デフォルトの名無しさん
2014/10/28(火) 06:51:19.60ID:M6wc9Z1lダメなんだよね。
キミが言う、コンパクションが必要な状態というのは、コンパクションを行うと
大変なことになる状態なんだよ。
GCが一番苦手とする状態を、キミは得意な状態と言っているわけ。
本を読んでるだけじゃダメってこと。
0460デフォルトの名無しさん
2014/10/28(火) 06:51:34.45ID:Ao3oXbnD大きい領域はOSに処理させればいいんじゃないかな。
http://e-words.jp/w/E383A1E383A2E383AAE382B3E383B3E38391E382AFE382B7E383A7E383B3.html
> OSや言語処理系などが持つ機能の一つで、メモリ(メインメモリ、主記憶装置)上の
> 空き領域の断片化を解消し、連続した広い空き領域に再編すること。
ようするに、32bitアプリの1プロセス4GB(2GB?)のメモリ空間で
断片化して使われない領域は、未割り当てにしてしまえばいいのよ。
あ、大きい領域の話ね。
そうすれば見かけ上は断片化してはいるけど、物理メモリは使用しておらず、
新しく確保するメモリは、後方部分を使うようにすれば何も問題なくなる。
俺程度が思いつくことなんだから、これぐらいやってると思うけどね。
0461デフォルトの名無しさん
2014/10/28(火) 06:53:19.24ID:Ao3oXbnDいや、だから君がGCが一番苦手といっていることは、
GCじゃなくても苦手でしょって話なんだが?
どちらにしろ苦手な問題であり、
GCは解決法が存在するが
GCじゃないと解決法すら存在しない
ってことを言ってるんだが。
0462デフォルトの名無しさん
2014/10/28(火) 06:54:00.18ID:M6wc9Z1lそうだよ。
だからGCはすでに時代遅れで、負債になってる。
一般的な常識としてそういう認識になってるよ。
0463デフォルトの名無しさん
2014/10/28(火) 06:55:06.31ID:Ao3oXbnDGCの話関係ないじゃん?
コンパクションが時代遅れだっていうのならわかるけどさ。
どうもGCが大嫌いで、GCをたたければ
いいみたいな考え方してるな。
0464デフォルトの名無しさん
2014/10/28(火) 06:55:58.00ID:M6wc9Z1lコンパクションがどうしても必要ならコンパクションを行えば良いんだよ。
本当にどうしても必要ならね。
GCは必要ない。
そして、C++はそこまで考えられている。
0465書き込み過ぎって出たからID変更
2014/10/28(火) 06:57:46.05ID:ToB9HJEu繰り返すけど、GC関係ないよね?
C++だってメモリの断片化は起きる。
断片化を極力しない方法をとっていると言うのなら
それはGCを使っていても同じ方法が取り入れられる。
0466デフォルトの名無しさん
2014/10/28(火) 06:59:06.98ID:M6wc9Z1lGCが嫌いじゃなくて、必要ないと考えてるんだよ。
そもそも、JavaなどにGCが付いてるのは、GCが素晴らしいからではないんだよ。
オブジェクトのコピー回避のために無駄を承知で付けてる。
ところが右辺値参照で解決してしまった。
それでGCは無駄と考えてる。
いずれなくなるだろね。
0467デフォルトの名無しさん
2014/10/28(火) 07:00:45.88ID:ToB9HJEu・あらかじめメモリを大量に確保し・・・それGCでもできるよね?
・なるべくメモリ領域を解放しな・・・それGCでもできるよね?
・独自の高度なメモリ管理アルゴ・・・それGCでもできるよね?
・OSに一部のコンパクションをゆだね・・・それGCでもできるよね?
・超スーパーミラクルなてくに・・・それGCでもできるよね?
こういう話なんだが。
0468デフォルトの名無しさん
2014/10/28(火) 07:01:00.77ID:M6wc9Z1lコンパクションは絶対に必要だからGCは絶対必要という人が多かったので
コンパクションについて説明してる。
俺は、GCが時代遅れと主張してる。
GC関係ないどころか、コンパクションの方がおまけ。
0469デフォルトの名無しさん
2014/10/28(火) 07:03:23.40ID:ToB9HJEu必要ないの理由がおかしい。
メモリコンパクションというのは今となって
は無駄だっていうのはまあいいよ。
そんなに反論しない。
でもGCの目的はメモリコンパクションのためではなく
プログラマの負担を減らすため。
あんたの論理は、元から必要ないものを持ってきて
GCは必要ないと言っているだけ。
まったくもって的はずれなんだよ。
0470デフォルトの名無しさん
2014/10/28(火) 07:03:40.81ID:M6wc9Z1lぜんぶ、「その結果どうなりますか?」と言われたら、合理的な答えが無いでしょう。
「GCに頼らないほうが合理的だよね」って話。
「時間はかかるけどGCでもできる」→「じゃあ何のためにGC使うの?」
0471デフォルトの名無しさん
2014/10/28(火) 07:03:43.04ID:4+xiP14aならスタックでいいじゃん
そういうことできないからヒープ使うんだし
0472デフォルトの名無しさん
2014/10/28(火) 07:04:09.05ID:ToB9HJEuじゃあプログラマの負担を減らすためにGCは必要って
話に変えようか?
それなら反論できそうもなさそうだしねw
0473デフォルトの名無しさん
2014/10/28(火) 07:04:39.42ID:ToB9HJEu> 「時間はかかるけどGCでもできる」→「じゃあ何のためにGC使うの?」
プログラマの負担を減らすために決まってるじゃんw
0474デフォルトの名無しさん
2014/10/28(火) 07:06:52.17ID:M6wc9Z1l理由は、本来GCが必要になった理由が、右辺値参照によって無くなったから。
もうGCの出番なくなった。
ホントにGCの必要性を全く感じない。
GCが無い言語と言えばC/C++が代表的だけど、Javaに出来てC/C++に出来ないことが
無いんだよね。
これ、GC必要ないってことでしょ。
逆にC/C++に出来てJavaに出来ないことは沢山あるでしょ。
0475ID略
2014/10/28(火) 07:07:00.51ID:9gCJT/mD遅くなる方法を取りながら(例 低級言語 → 高級言語、手続き型 → オブジェクト指向)
プログラマの負担をコンピュータに肩代わりさせることで
進化してるんだけどね。
0476デフォルトの名無しさん
2014/10/28(火) 07:07:48.72ID:6AxRmH6y> 理由は、本来GCが必要になった理由が、右辺値参照によって無くなったから。
無くなっていない。
一部の問題を解決したに過ぎない。
0477デフォルトの名無しさん
2014/10/28(火) 07:08:54.87ID:M6wc9Z1l右辺値参照ができたおかげで、プログラマの負担も変わらないどころか、
GCのせいで増えてるよ。
たとえばRAIIで不利になるとか。
RAIIに忠実に、右辺値参照を使う。
これでずいぶん楽になる。
0478デフォルトの名無しさん
2014/10/28(火) 07:10:10.95ID:Il6Rm78Kますます増えてしまってるからな。
右辺値参照はC++の最悪な機能の一つだわw
0479デフォルトの名無しさん
2014/10/28(火) 07:11:02.84ID:7RgMAP3p0480デフォルトの名無しさん
2014/10/28(火) 07:11:10.86ID:M6wc9Z1lやってるどころか、コンパクションが必要になる状態なんてほとんどないよ。
0481デフォルトの名無しさん
2014/10/28(火) 07:14:31.69ID:M6wc9Z1l脳内負担なんて全く増えない。
今まで出てこなかったのが不思議なくらい。
実際使ってみれば目から鱗。
こんな簡単な仕組みですべての問題が片付く。
Java作った人も、GC搭載しないで右辺値参照を思いつけば天才だったのにね。
0482デフォルトの名無しさん
2014/10/28(火) 07:21:40.56ID:M6wc9Z1lだって化石だから。
JavaにGC搭載したのは悔やまれるなあ。
0483デフォルトの名無しさん
2014/10/28(火) 07:22:17.95ID:rq2ADtmO誰も正しく使えないってことだな。
このせいで新たなバグが増えることになる。
バグを減らすための機能が、余計に複雑な機構を作ってしまい、
更にバグが増えることになるなるわけさアハハハ
0484デフォルトの名無しさん
2014/10/28(火) 07:25:07.81ID:xnfqHYphずっと大きな問題をC++は含んでいるからね。
誰がどう見てもC++はシンプルな言語じゃない。
プログラマに負担をかける言語。
そのせいで生産性が大きく下がってしまっている。
0485デフォルトの名無しさん
2014/10/28(火) 07:27:34.40ID:M6wc9Z1lC++11、14でずいぶん楽になった。
これもうスクリプト言語とかいらないっしょ。
スクリプト言語の欲しかったあの機能。
全部入ったから。
Lispの欲しかった機能?ないよ?
だって化石だし。
0486デフォルトの名無しさん
2014/10/28(火) 07:35:13.84ID:xnfqHYphC++はほんの僅かなメモリや速度を追求するために生産性を下げてる。
GCも生産性を上げるための機能の一つである、GCがない言語は生産性が低い。
GCがなくても出来る。ただし生産性は下がるけどね。
この考え方はもはや世の中には不要なものなんだよ。
メモリコンパクションと同じようにね。
0487デフォルトの名無しさん
2014/10/28(火) 07:35:36.46ID:M6wc9Z1l安易な方向に走った。
そのツケをこれから支払う。
0488デフォルトの名無しさん
2014/10/28(火) 07:41:34.64ID:M6wc9Z1lC/C++は生産性が高い。
GC搭載言語のユーザーはC/C++で書かれたライブラリやAPIを呼び出してるだけ。
それを生産性が高いと勘違いしてはいけない。
C/C++は、C/C++で書かれたAPIやライブラリの呼び出しが難しいか?
否!
楽勝である。
GC搭載言語は、C/C++が使われるような複雑なコードを書くのに向いていないのである。
たしかに、C/C++は複雑で難解なアルゴリズムのために使われる。
だからといって、簡単なものしか書けないことを生産性が高いと勘違いしてはいけない。
0489デフォルトの名無しさん
2014/10/28(火) 07:42:30.24ID:xnfqHYphモンスターです。私が初めて習得した言語だったので、他の多くの言語を試してみるまで、
C++を使うと開発者の生産性が下がり、能力が制限されるという事実に気がつきませんでした。
C++の悪評は有名なプログラマたちによって広まっていますが、私もまったく同感です。
まるでビャーネ・ストロヴストルップが思いつくままに一つまた一つと機能をC言語に追加していったら
できあがってしまった代物のように見えます。C++に課されたコードの読みにくさは、
開発者の生産性を80パーセント以上低下させると言っていいでしょう。次のように考えてみてください。
あなたは容量Xの脳を持っています。どのくらいの容量かということは別にして容量には限りがあるため、
あなたはできる限り多くの容量を重要な事柄のために使いたいと思っています。こうした場合、
言語“それ自体”のために消費するエネルギーを減らし、問題解決やアルゴリズムのエンコードに
脳の大部分を使うのが賢明でしょう。言語が複雑な場合、あなたがどんなに賢くても、言語のシンタックスや
セマンティクスに多くの容量を使うことになり、自分の考えを効率的に反映するための容量は少なくなります。
C++は、得るものが少ない割に複雑すぎる言語の典型です。確かにC言語で大規模なプログラムを構築するのは
難しいと思います(ただし間違いなく選択肢の一つではあります。Linuxカーネルを見てください)。
C++が実際に世界中で使われているという事実を除けば、GoやRust、Dの方があらゆる点で優れています。
0490デフォルトの名無しさん
2014/10/28(火) 07:44:56.88ID:M6wc9Z1l化石には化石の生き方が有るから。
0491デフォルトの名無しさん
2014/10/28(火) 07:48:18.73ID:M6wc9Z1lイイエ、そのJSが走るブラウザはC/C++で書かれています。
JSの実力と勘違いしないでください。
すべてこの調子。
簡単なものしか書けないことを「簡単に使える言語」とか言わないでください。
バカだと思われますよ?
0492デフォルトの名無しさん
2014/10/28(火) 09:04:42.48ID:RUl4+6uO0493デフォルトの名無しさん
2014/10/28(火) 09:08:05.97ID:RUl4+6uO簡単なものを書くなら簡単に書ける言語で書いたほうがいい
ID:M6wc9Z1lは間違ってる。騙されるところだった。
0494デフォルトの名無しさん
2014/10/28(火) 09:28:20.08ID:bWqS4im1って話を…なぜお前らはこんなに時間をかけるんだwww
0495デフォルトの名無しさん
2014/10/28(火) 09:40:16.28ID:Vwqyi7SIそうじゃないならメモリ管理の事は処理系にまかせて忘れちゃえばいいのだ。
0496デフォルトの名無しさん
2014/10/28(火) 12:18:24.54ID:TlJSw6K80497デフォルトの名無しさん
2014/10/28(火) 13:06:43.85ID:/Y9XnqU0shebang
0498デフォルトの名無しさん
2014/10/28(火) 13:24:12.62ID:7D4H9npv0499デフォルトの名無しさん
2014/10/28(火) 13:24:36.45ID:Vwqyi7SI0500デフォルトの名無しさん
2014/10/28(火) 13:25:18.17ID:Vwqyi7SI0501デフォルトの名無しさん
2014/10/28(火) 14:54:03.32ID:Z7Ne2Ojxスタック領域の利用用途しってての発言か?
全部pushしろと?
0502デフォルトの名無しさん
2014/10/28(火) 17:35:23.93ID:s98vcxYO> 確保した順番の逆から解放する
なら、スタックで充分だろ。
なにか、問題あるのか?
0503デフォルトの名無しさん
2014/10/28(火) 18:19:51.14ID:ZFLQwBg+0504デフォルトの名無しさん
2014/10/28(火) 19:03:33.25ID:uvfLqTRTアプリケーションのメモリ空間のコンパクションはOSではできない
0505デフォルトの名無しさん
2014/10/28(火) 19:05:22.52ID:uvfLqTRT残念ながら move semantics で解決できる問題はごくわずか
0506デフォルトの名無しさん
2014/10/28(火) 19:06:24.78ID:uvfLqTRTGC 搭載で OO がやさしくなった
0507デフォルトの名無しさん
2014/10/28(火) 20:39:36.85ID:XjbWXaTq設計が悪いって話だから。
0508デフォルトの名無しさん
2014/10/28(火) 20:56:49.18ID:vS3GoyWK0509デフォルトの名無しさん
2014/10/28(火) 21:08:37.92ID:uEWDfUej0510デフォルトの名無しさん
2014/10/28(火) 22:04:00.08ID:uvfLqTRT「システム」って具体的にどんな要素のこと?
単にメモリが足りないとか物量の問題か?
スマフォ、ときどき再起動せないかへんのは、やっぱり根本的にメモリまわりがまずいんじゃない?
0511デフォルトの名無しさん
2014/10/28(火) 22:12:32.64ID:s98vcxYO解決できない問題ってなに?
0512デフォルトの名無しさん
2014/10/28(火) 22:13:31.68ID:Vwqyi7SI0513デフォルトの名無しさん
2014/10/28(火) 22:58:45.72ID:uvfLqTRT循環参照
0514デフォルトの名無しさん
2014/10/28(火) 23:10:00.30ID:4+xiP14aなるほど、それだけ?
0515デフォルトの名無しさん
2014/10/28(火) 23:15:37.40ID:uvfLqTRTこれはでかいよ
0516デフォルトの名無しさん
2014/10/29(水) 00:06:54.03ID:xqvbqTHVいや、解決できる問題はごくわずか = 問題たくさん残ってるよー じゃないのかと
0517デフォルトの名無しさん
2014/10/29(水) 00:31:47.75ID:ITcKex6dだから循環参照はでかい問題かと
0518デフォルトの名無しさん
2014/10/29(水) 07:08:27.89ID:ITcKex6dカメラ用途で使いまくっていると特にね
0519デフォルトの名無しさん
2014/10/29(水) 08:35:44.27ID:dRVXcUto俺のスマホなんて、自動再起動機能付きだぜ
まともなスマホが欲しいわ w
2chMate 0.8.6.16 dev/PANASONIC/P-01D/2.3.4/LT
0520デフォルトの名無しさん
2014/10/29(水) 13:04:45.01ID:V4b3gVoX0521デフォルトの名無しさん
2014/10/29(水) 14:16:22.97ID:+dOdWCkt>>500
どこがおかしいんだよ。
0522デフォルトの名無しさん
2014/10/29(水) 14:59:43.12ID:HBXTyN9+shebangてスクリプト言語の機能じゃないもの
0523デフォルトの名無しさん
2014/10/29(水) 18:49:35.61ID:ITcKex6d>リンクリスト方式のスマートポインタ
なにそれ?
0524デフォルトの名無しさん
2014/10/30(木) 07:23:06.33ID:Yy7uGwo0うん、あれ実はUnix系OSに組み込まれてる機能なんだよねw
環境によっちゃ処理系やシェルでシミュレートしてるかも知れんが
0525デフォルトの名無しさん
2014/10/30(木) 07:26:21.79ID:Yy7uGwo00526デフォルトの名無しさん
2014/10/30(木) 22:02:47.37ID:sL615/A1>>471
スタック領域の利用用途しってての発言か?
全部pushしろと?
まとまった領域を確保したい場合はSP(ESP)レジスタを直接いじる
SP(スタックポインタ)レジスタはその名の通りポインタなんだけど
このレジスタだけ変更してもそのまま使ってしてしまうとページフォルト例外が発生する
それを避けるために最小ページサイズ(Win32だと4KB)毎にアクセスして
OSに使用ページサイズを申告する処理を入れていく
ヒープとして確保する領域も内部的には同様の処理が入る
0527デフォルトの名無しさん
2014/10/30(木) 22:06:05.80ID:sL615/A1スタックに置けるならそれが一番良いよ
0528デフォルトの名無しさん
2014/10/30(木) 22:44:20.26ID:7fc6WtHX>>503 の意味理解できてるか?
ソフトウェアスタックとか聞いたことないかな?
それはさておき、ネタで書いてるならいいけど
> それを避けるために最小ページサイズ(Win32だと4KB)毎にアクセスして
を、マジで書いてるなら、仮想記憶の仕組みについてちゃんと勉強した方がいいぞ
そもそも避けるための 4KB の最初のアクセスで例外が発生するだろうし w
0529デフォルトの名無しさん
2014/10/30(木) 23:03:05.76ID:sL615/A1そんなん想定してなかったから退散するよ
続けてどうぞ
0530デフォルトの名無しさん
2014/10/31(金) 00:02:07.95ID:v3TvpUXWスタックの自動拡張知ってるオレってスゲーだろと言いたい園児なんだろ。
>>529
>>471はデータ構造としてのスタック(FIFO)の事だ。
0531デフォルトの名無しさん
2014/10/31(金) 00:17:25.08ID:H/kqMfATまあ、退散するやつを追いかけてもしょうがないやね
0532デフォルトの名無しさん
2014/10/31(金) 00:20:41.87ID:ZMC8RAduスタックはLIFOかと…
0533デフォルトの名無しさん
2014/10/31(金) 00:21:33.04ID:v3TvpUXWそうだね。
0534デフォルトの名無しさん
2014/10/31(金) 01:44:34.60ID:fvAGO10b0535デフォルトの名無しさん
2014/10/31(金) 02:14:46.46ID:v3TvpUXW0536デフォルトの名無しさん
2014/10/31(金) 08:54:45.93ID:0bCoK9DA0537デフォルトの名無しさん
2014/10/31(金) 10:13:07.22ID:L7CxOLNK0538デフォルトの名無しさん
2014/10/31(金) 12:27:44.04ID:ugmQtoGq貴様とはいい酒が呑めそうだ。///
0539デフォルトの名無しさん
2014/10/31(金) 12:54:13.95ID:oTQQqA0Mお前だけじゃね?
0540デフォルトの名無しさん
2014/10/31(金) 13:00:54.88ID:yvXaR7Ss0541デフォルトの名無しさん
2014/10/31(金) 13:04:33.32ID:9+j1ATQW0542デフォルトの名無しさん
2014/10/31(金) 13:40:17.20ID:v3TvpUXW>>451
>ゲームに限らず、確保した順番の逆から解放するのが基本だろ。
0543デフォルトの名無しさん
2014/10/31(金) 14:04:07.93ID:MCSU0wv90544デフォルトの名無しさん
2014/10/31(金) 16:36:35.18ID:lZPBQQs6あっそう。じゃインタプリタ。
0545デフォルトの名無しさん
2014/10/31(金) 16:43:28.62ID:yvXaR7SsOSがプログラムを起動する機能の一部だよ。
0546デフォルトの名無しさん
2014/10/31(金) 18:28:13.64ID:Qf4uHoUl0547デフォルトの名無しさん
2014/10/31(金) 18:40:57.50ID:fvAGO10bなんでだめなんだよーFIFO(爆笑)じゃないからかよー
0548デフォルトの名無しさん
2014/10/31(金) 19:55:07.03ID:oTQQqA0Mからかったつーか、それができるならヒープなんざ使わなくてもいいから、GC なんかも要らんだろ?
って言う意味で書いたら、全部 Push しろとか、4KB 毎に云々とかワケわからん話になっただけ
0549デフォルトの名無しさん
2014/10/31(金) 21:58:25.90ID:2rsPywEmスタック内の離れたところはreservedになってるから
使うためには一旦(致命的でない)page faultを発生させて
reservedからcommitに変えてやる必要があるって話
0550デフォルトの名無しさん
2014/10/31(金) 22:29:55.87ID:H1o0XsxM0551デフォルトの名無しさん
2014/10/31(金) 23:27:03.40ID:mPjKzzHZもう少しlibcやcrt嫁
0552デフォルトの名無しさん
2014/10/31(金) 23:55:39.62ID:BnCuqoHL0553デフォルトの名無しさん
2014/11/01(土) 01:47:44.14ID:xo0hFZXQ>>530
>スタックの自動拡張知ってるオレってスゲーだろと言いたい園児なんだろ。
0554デフォルトの名無しさん
2014/11/01(土) 07:48:11.12ID:yfMW+WpF中途半端に理解した気になってるアホとしか思えない
0555デフォルトの名無しさん
2014/11/01(土) 09:26:31.81ID:8KfJEHPC>Windowsではスレッドのスタックは最初2ページだけメモリが確保されて,その後はガードページに当たるたびに自動拡張されて最大サイズまで広がるようになっている.
>Windows 2000までは最大スタックサイズはプロセスで全て同じ.
>XPではCreateThreadでスレッド毎に最大サイズを設定できるようになっている.
0556デフォルトの名無しさん
2014/11/01(土) 13:40:45.17ID:zs4Qkwfw0557デフォルトの名無しさん
2014/11/01(土) 13:47:42.98ID:hdcrWs+gGCいらない。スタック使えばいい
スタックなんてメインメモリがあるかぎり使えるって流れ
0558デフォルトの名無しさん
2014/11/01(土) 14:03:22.97ID:EqQEUY920559デフォルトの名無しさん
2014/11/01(土) 14:14:54.54ID:iHNVy8d70560デフォルトの名無しさん
2014/11/01(土) 14:22:43.32ID:G6fogZA9関数を抜けるまで解放されないから
ある意味GCよりガバガバやんけ
0561デフォルトの名無しさん
2014/11/01(土) 16:46:34.16ID:TgOtBrGZそんなことは無いけどね。
0562デフォルトの名無しさん
2014/11/01(土) 16:52:18.72ID:D3G7iSJM存在しない変数とかもありうるけど、まぁ何を言っても無駄な奴には無駄だな。
0563デフォルトの名無しさん
2014/11/01(土) 18:36:35.79ID:zs4Qkwfw0564デフォルトの名無しさん
2014/11/01(土) 18:56:56.91ID:yfMW+WpF実際に解放するかどうかはコンパイラとか設定によるけどな
0565デフォルトの名無しさん
2014/11/01(土) 19:45:29.81ID:BL3FCvnE0566デフォルトの名無しさん
2014/11/01(土) 19:57:37.83ID:kdzKFYUV0567デフォルトの名無しさん
2014/11/01(土) 19:58:16.62ID:TgOtBrGZGCに依存する言語使ってると意識することが無いので>>560のような誤解が生まれる。
まあそれは良いと思う。
動けば良いジャンルもあるから。
とはいえ、上から目線で「お前らはGCより雑魚なんだじぇじぇじぇ」とか
言ってくるのがなんだかなあて感じ。
GCは既に過去の技術だよ。
0568デフォルトの名無しさん
2014/11/01(土) 20:04:46.36ID:TgOtBrGZこれはもうちょっと議論したほうが良い。
将来はGCを完全に無くすべきだと思う。
0569デフォルトの名無しさん
2014/11/01(土) 20:08:05.55ID:hs3boz8Y動くようになるならな。
複雑なコードを書いて、ほらGCいらないんです。
って言っても何の説得力もない。
0570デフォルトの名無しさん
2014/11/01(土) 20:10:04.62ID:n3qiU1JIでもそれは内部の話だから、
言語仕様は全く同じまま実現できるはずだよ。
0571デフォルトの名無しさん
2014/11/01(土) 20:20:38.73ID:etXlBO/Aアプリケーションエラーで落ちまくるのは大抵中身がC++
リソースを掴みっぱなしでシステムごと落とすのは大抵GC使用言語
どっちがいいかな
0572デフォルトの名無しさん
2014/11/01(土) 20:36:37.55ID:g3m3cPJSそもそもGCって見かけ上 >>498 みたいな世界をしようとするものであって、
後始末が必要なリソースの管理をさせようってのが間違ってるんじゃないの?
0573デフォルトの名無しさん
2014/11/01(土) 20:36:59.72ID:n3qiU1JIGCありでリソースを掴みっぱなしにするようなコードを
同じようにC++で書いたら同じ用にリソース掴みっぱなしになると思うけど?
それ以上にアプリケーションエラーで落ちまくるのが
頻発しているから、あまり話題にならないんだろうね。
0574デフォルトの名無しさん
2014/11/01(土) 20:37:35.82ID:g3m3cPJS0575デフォルトの名無しさん
2014/11/01(土) 20:40:36.00ID:etXlBO/Aそうだね
じゃあGCは成功でいいんじゃない?
0576デフォルトの名無しさん
2014/11/01(土) 20:44:19.65ID:n3qiU1JIメモリ管理から人間が解放されたっていう意味もあるけど、
もう一つ重要なのは「シンプルかつ直感的なコードで」
メモリ管理から解放されたことがとても重要な事なんだよ。
メモリ管理から解放されるためにいろんなことを考えなきゃいけない言語はダメ。
0577デフォルトの名無しさん
2014/11/01(土) 20:46:09.79ID:4gtQH+KV>もう少しlibcやcrt嫁
windows(大爆笑)
0578デフォルトの名無しさん
2014/11/01(土) 20:55:07.98ID:qo22BqRg?
0579デフォルトの名無しさん
2014/11/01(土) 20:57:50.03ID:mUvqqgtrアプリケーションプログラミングではGCのある言語を使うべきって言ったのは
Linusだっけ?
0580デフォルトの名無しさん
2014/11/01(土) 21:06:23.49ID:n3qiU1JIあと何年かは、ハードウェア性能を極限まで
引き出すことが3Dゲームの魅力につながる時代が続くだろうし。
0581デフォルトの名無しさん
2014/11/01(土) 21:24:13.04ID:TgOtBrGZそれは勉強したほうが良いんじゃないかな。
もうちょっと理解を深めてから議論に参加しないと、ただの荒らしになってる。
0582デフォルトの名無しさん
2014/11/01(土) 21:26:03.49ID:n3qiU1JIつまり、言語仕様を変えないとGCは使えないってことだよね?
それじゃだめだろう。
GCありの言語はシンプルだよ。
function foo() {
var obj = new Object;
}
これだけのシンプルな言語仕様でGCは発動する。
これを変えないと実現できないということは
今よりも言語仕様が複雑になるということ。
それじゃ人間にとってやさしくない。
0583デフォルトの名無しさん
2014/11/01(土) 21:33:18.47ID:TgOtBrGZGCを前提にした言語では、例えば右辺値参照などは実現できない。
0584デフォルトの名無しさん
2014/11/01(土) 21:36:02.69ID:n3qiU1JI考え方がコンピュータよりになってないか?
まず、人間にとって優しいかどうか?
現代のプログラム言語はこれを第一に考えないとだめだ。
ここまではわかるよね?
右辺値参照が目的じゃないんだ。
どんな技術を使うかは関係ない。
その技術を直感的でシンプルに書ける言語が素晴らしい言語。
ちょっと前までは速い言語が素晴らしい言語という定義だったが
その時代はもう終わったんだよ。一部(3Dゲームぐらい)しか生き残ってない。
0585デフォルトの名無しさん
2014/11/01(土) 21:39:03.51ID:TgOtBrGZ右辺値参照は設計をシンプルにする。
GCはOOPと決定的に親和性を欠く。
0586デフォルトの名無しさん
2014/11/01(土) 21:43:20.36ID:n3qiU1JIそれじゃ、右辺値参照を使ったコードと
右辺値参照が使えるクラスの両方を
ここに書いてくれない?
同じようにGCがある言語(JavaScript)で書くからさ
GCが使えるクラス
function Klass() {
this.value = 1;
}
Klass.prototype.bar = function() {}
GCを使ったコード
function foo() {
var obj = new Klass;
}
0587デフォルトの名無しさん
2014/11/01(土) 21:48:49.07ID:TgOtBrGZ右辺値と左辺値は別のものである。
ここがわかっていない。
これを区別できないなら、右辺値参照を実装しているとは言えない。
もうちょっと勉強してから書き込まないと、ただの荒らしにしかならない。
0588デフォルトの名無しさん
2014/11/01(土) 21:50:14.65ID:TgOtBrGZここら辺もわかっていないと議論にならない。
0589デフォルトの名無しさん
2014/11/01(土) 21:56:25.26ID:n3qiU1JI能書きはいいからコードを書けよ。
あんたが今やることはコードを書くことだけだ。
0590デフォルトの名無しさん
2014/11/01(土) 21:58:15.27ID:n3qiU1JI俺は右辺値参照を実現しているコードを書いてるって言ってないんだよ。
スレタイ見ろ。GCの話だ。
だからGCが使われるシンプルなコードを書いた。
GCを使わないで同じことが実現できると
主張したいなら、
それを見事、右辺値参照でも使って
書いてみせろって言ってるだけ。
0591デフォルトの名無しさん
2014/11/01(土) 22:03:34.80ID:TgOtBrGZ右辺値参照を実装している言語はC++だけど、C++では見かけ上、何も変わらない。
もうちょっと勉強しないと議論にならないと思う。
タダの荒らしにしかなっていない。
0592デフォルトの名無しさん
2014/11/01(土) 22:07:18.95ID:yfMW+WpFそのコード何ら意味のあることしてないから、コードなんてイランやろ w
0593デフォルトの名無しさん
2014/11/01(土) 22:09:59.59ID:TgOtBrGZ0594デフォルトの名無しさん
2014/11/01(土) 22:11:33.52ID:n3qiU1JIだからコードを書けって。
何度も言わせるな。
0595デフォルトの名無しさん
2014/11/01(土) 22:17:47.93ID:TgOtBrGZこの例で何を示したいのかが良くわからない。
右辺値参照以前に、コピーでまったく問題が起こらないので、この例は
GCがいかにダメかを示すものになるはず。
実のところ、GC前提の言語もろくに使ったことが無いのではないだろうか。
0596デフォルトの名無しさん
2014/11/01(土) 22:19:26.67ID:n3qiU1JIさあ、いつまでにげるのかw
0597デフォルトの名無しさん
2014/11/01(土) 22:23:51.62ID:TgOtBrGZ書くのは良いのだけど、この例では、デフォルトのコピーコンストラクタを
使うことになるはず。
つまり、コンストラクタを書かない。
右辺値参照以前に、GCがなぜ必要とされたのかも、わかっていないのではなかろうか。
もうちょっと勉強してから書きこまないと、荒らしにしかならない。
0598デフォルトの名無しさん
2014/11/01(土) 22:25:28.73ID:n3qiU1JIじゃあ書けよ。
ほんと言い訳がましいやつだな。
0599デフォルトの名無しさん
2014/11/01(土) 22:27:27.21ID:TgOtBrGZstruct A
{
val = 1;
};
A a;
これに何の意味が有る?
0600デフォルトの名無しさん
2014/11/01(土) 22:29:08.69ID:n3qiU1JIうん、やっと話がスタートしたね。
じゃあ、それを君が意味があると思うコードにしてみて。
右辺値参照があればーと言っているわけだから
右辺値参照を使うコードにするということ。
0601デフォルトの名無しさん
2014/11/01(土) 22:33:00.87ID:TgOtBrGZこれは既に右辺値参照を扱えるのだけど。
ホントにキミ、荒らしにしかなっていない。
0602デフォルトの名無しさん
2014/11/01(土) 22:40:38.98ID:QNLi3TDU個人的には右辺値参照くんの病的で狂信的に右辺値参照押ししてくるところがいいと思う、
ぶっちゃけ、私は右辺値参照くんのファンになってしまった。
D:n3qiU1JI の人も右辺値参照くんにしっかりくいついて盛り上げていってほしい。
あと、右辺値参照くんはもうちょっと丁寧に右辺値参照について説明して上げてほしい。
0603デフォルトの名無しさん
2014/11/01(土) 22:44:05.14ID:n3qiU1JI「扱えるのだけど」じゃなくて
扱うコードを書けって。
何度言わせるんだ?
0604デフォルトの名無しさん
2014/11/01(土) 22:46:02.05ID:n3qiU1JIこんなスレで収まるほど簡単に説明はできないって
C++に慣れた人でもかなり勉強しないと
正しく使えるようにならないんだから。
0605デフォルトの名無しさん
2014/11/01(土) 22:46:50.79ID:TgOtBrGZA b(std::move(a));
これだけ。
で、何が言いたいの?
0607デフォルトの名無しさん
2014/11/01(土) 22:47:41.39ID:n3qiU1JIそのstd::move(a)); とは何か?
それを説明するとどんどん難しくなるだろう?
0608デフォルトの名無しさん
2014/11/01(土) 22:48:13.41ID:TgOtBrGZ何言ってんの?
右辺値参照とは、右辺値への参照。
一言で説明できる。
0609デフォルトの名無しさん
2014/11/01(土) 22:48:59.95ID:TgOtBrGZ左辺値を右辺値にキャストする。
何も難しくないだろ。
0610デフォルトの名無しさん
2014/11/01(土) 22:49:06.18ID:n3qiU1JI>
> 一言で説明できる。
これ、何も説明してない(笑)
0611デフォルトの名無しさん
2014/11/01(土) 22:50:18.56ID:TgOtBrGZ完全に説明しきってるだろ。
0612デフォルトの名無しさん
2014/11/01(土) 22:50:25.37ID:n3qiU1JI> 左辺値を右辺値にキャストする。
なんのために?
それをするとどうなる?
なぜそんなのが必要なのか?
それに答えるのが説明するってことだよ。
0613デフォルトの名無しさん
2014/11/01(土) 22:53:07.68ID:yfMW+WpF使う必要ないものを使えと? w
0614デフォルトの名無しさん
2014/11/01(土) 22:55:42.27ID:TgOtBrGZ必要なければコピーすれば?
必要を感じたら使えばいいだけでしょ。
そもそも意識しなくても使ってるんだよ。
勉強したいなら、自分で勉強すればいいよ。
先生は忙しいから、もうちょっと勉強してからおいでよ。
0615デフォルトの名無しさん
2014/11/01(土) 22:58:05.54ID:n3qiU1JI説明が大変だから仕方ないね。
0616デフォルトの名無しさん
2014/11/01(土) 22:58:13.14ID:TgOtBrGZそうなんだよな。
あの例で何をしたかったのかがさっぱりわからん。
おそらくGC自体良くわかってないんだろな。
予想だけど、GC導入の動機がパフォーマンスの改善に有るということが
理解できていないんじゃないだろうか。
0617デフォルトの名無しさん
2014/11/01(土) 23:00:27.80ID:TgOtBrGZそもそも何を説明しろと言ってるのかがわからない。
右辺値参照を利用するには何かをしなければならないと思ってるのかもしれない。
しかしそうではない。
何もしなくても、右辺値参照は使われてる。
0618デフォルトの名無しさん
2014/11/01(土) 23:01:49.64ID:tJ+ySesM> 理解できていないんじゃないだろうか。
違うぞ。GCの目的はプログラマの負担とミスを減らすため。
お前こそわかっとらんじゃないか。
0619デフォルトの名無しさん
2014/11/01(土) 23:03:11.10ID:TgOtBrGZ負担を減らすだけなら、コピーで良いでしょ。
そっちの方がずっとわかりやすい。
0620デフォルトの名無しさん
2014/11/01(土) 23:06:35.46ID:tJ+ySesMなんでオブジェクト作成→破棄の話で
コピーが出てくるんだよ?
0621デフォルトの名無しさん
2014/11/01(土) 23:06:57.56ID:TgOtBrGZこれがスコープの限定を難しくし、ミスの発生につながる。
これがGCが良くない理由。
原理的にはコピーが一番良い。
0622デフォルトの名無しさん
2014/11/01(土) 23:08:48.60ID:tJ+ySesMなんか根本的に話がずれてないか?
0623デフォルトの名無しさん
2014/11/01(土) 23:08:56.99ID:bp3MCKN/しかしパフォーマンス重視するとalignで確保するからgcなんぞ使えんけどな
0624デフォルトの名無しさん
2014/11/01(土) 23:09:17.91ID:etXlBO/ALISP派生だからと言われるとそうなんだが
言語であれだけふくざつなことやってるなら変数の生存期間ぐらい面倒見れそうな気がするんだけどなあ
0625デフォルトの名無しさん
2014/11/01(土) 23:10:25.28ID:yfMW+WpF> GCの目的は(メモリー管理について)プログラマの負担とミスを減らすため。
だろ?
メモリー管理が必要ないコードで何を言いたいのかさっぱりわからん
0626デフォルトの名無しさん
2014/11/01(土) 23:13:48.03ID:tJ+ySesMコピーとインスタンス作成は別々の概念だよ。
それはわかってるのかな?
GCは必要なくなったインスタンスを
自動的に回収する技術で、コピーとは全く無関係。
もしかして一つのオブジェクトを複数の変数から
参照したいことがあるってわかってないとか?
複数の変数から、同じオブジェクトを参照したいなら、
そのオブジェクトをコピーしたほうがいいと考えてるのかな?
コピーしちゃったら別々のインスタンスになるから、
片方が修正しても、もう一方は変わらない。
0627デフォルトの名無しさん
2014/11/01(土) 23:15:31.78ID:TgOtBrGZそれは参照すればいいだけ。
何が言いたいのかがさっぱりわからん。
0628デフォルトの名無しさん
2014/11/01(土) 23:16:57.62ID:yfMW+WpF> もしかして一つのオブジェクトを複数の変数から
> 参照したいことがあるってわかってないとか?
std::shared_ptr
0629デフォルトの名無しさん
2014/11/01(土) 23:26:13.99ID:bp3MCKN/かなりの部分すっとばして生存期間とスコープ考えてある程度設計頭に描きながら
考えで言ってる事なんじゃねーのと俺は思ってたんだが
そりゃ内部的な動作は全く違うし、使い方も異なるよ
0630デフォルトの名無しさん
2014/11/01(土) 23:27:04.85ID:R8grbRHL参照できるものを勝手に破棄されるの恐くね?
0631デフォルトの名無しさん
2014/11/01(土) 23:28:58.11ID:TgOtBrGZそういう意味で言ってる。
基本的にコピーするべき。
設計の基本だと思う。
しかしそれではパフォーマンスの問題がある。
そこで、右辺値参照。
0632デフォルトの名無しさん
2014/11/01(土) 23:34:09.83ID:qo22BqRgオブジェクトは全て参照のJavaにコピーコンストラクタの話は???だろうに。
0633デフォルトの名無しさん
2014/11/01(土) 23:36:42.63ID:TgOtBrGZそうなんだよね。
もう少し勉強してから書き込まないと荒らしになると何度も言ってるんだけどね。
0634デフォルトの名無しさん
2014/11/01(土) 23:42:23.46ID:TgOtBrGZそれはパフォーマンス上のアイデアに違いない。
ここからまずわかっていなさそうなので、もう少し勉強したほうが良いと言ってる。
0635デフォルトの名無しさん
2014/11/01(土) 23:50:05.54ID:qo22BqRg「言語が思考を規定する」だったかな。
もっと敵をよく知らないとな。
0636デフォルトの名無しさん
2014/11/01(土) 23:56:45.48ID:qo22BqRg0637デフォルトの名無しさん
2014/11/01(土) 23:59:33.20ID:OtA6KIlR暗黙変換されるからarcよりバグの元になりそう
0638デフォルトの名無しさん
2014/11/02(日) 00:05:14.22ID:8S1WeHayオブジェクトを修正した時にコピーが作られる。
Copy-on-Writeを言語レベルで実現している。
0639デフォルトの名無しさん
2014/11/02(日) 00:08:58.11ID:MZH26PPRC++のweak_ptrの立場がなくなる
0640デフォルトの名無しさん
2014/11/02(日) 00:21:02.58ID:Hoa1ulm8右辺値くんは「javaがgc採用したのは引数をコピー渡しすると遅くなるから」
と思ってるあほだからインスタンスと構造体の区別もつかないと思うよ
0641デフォルトの名無しさん
2014/11/02(日) 00:33:02.44ID:u/SB4U3Zなかなか名言よね
0642デフォルトの名無しさん
2014/11/02(日) 01:28:11.75ID:L/9+J0W5ゆとりかつ臆病な若者としてはC++使ってnewも、STLも可能な限り使わないで、代わりにスタックメモリたっぷり使うのが1番安心できる
事なかれ主義な若いプログラマには結構いそう
0643デフォルトの名無しさん
2014/11/02(日) 01:39:26.08ID:pOi6viHj0644デフォルトの名無しさん
2014/11/02(日) 01:46:52.03ID:Lqm+QUe+0645デフォルトの名無しさん
2014/11/02(日) 01:53:09.42ID:MZH26PPR仕様と実装を混ぜて書くので、そこもご了承ください。
>>612
言語仕様上は右辺値参照に左辺値を代入できないから。
左辺値は大雑把にいって変数でスタックの中程にある。多分ポインタ。
右辺値は大雑把にいってスタックトップにある。これも多分ポインタ。
右辺値参照の参照先は破壊されるかもしれない。
スタックトップなら関数を抜けた後は不定だからこれは妥当。
処理系によってはnullにするかもしれない。
さて、std::move(a)だが、大雑把にいって左辺値をスタックトップに積みなおしている。
これで左辺値を破壊する可能性がなくなり、右辺値参照にはスタックトップの左辺値(のコピー)が代入される。
代入後はスタックトップの左辺値は捨てて良い。
オブジェクトをスタックに割り当てる際、実体をヒープにポインタをスタックに積む実装はよく目にする。
だから右辺値の参照を得るのは難しくはないと思う。
0646デフォルトの名無しさん
2014/11/02(日) 02:01:24.77ID:Lqm+QUe+前者の時はどうせ一時オブジェクトだから、コピーしないで参照のまま渡しちゃえば効率よくね?
っていう考えなんだと思ったんだけど違ってる?
0647デフォルトの名無しさん
2014/11/02(日) 02:12:58.43ID:MZH26PPRString s = "a" + "b" +…+ "z";
大抵の奴らは気にしない。
0648デフォルトの名無しさん
2014/11/02(日) 02:32:23.54ID:MZH26PPRあってんじゃね
0649デフォルトの名無しさん
2014/11/02(日) 02:55:38.79ID:6JfF1xXYあー、なるほど。
そういう時に早く処理するために
GCが作られたとか勘違いしてんのか。
だから速度勝負をしてるわけねw
0650デフォルトの名無しさん
2014/11/02(日) 03:09:15.75ID:Lqm+QUe+GCの対象になるオブジェクトは普通はみんな参照で暗黙にコピーされたりしないんだから、
比べても意味ないんじゃね?
0651デフォルトの名無しさん
2014/11/02(日) 04:11:29.99ID:MZH26PPRJavaなら右辺値はプリミティブでなければ常にオブジェクトの参照なので、
左辺値は常に右辺値参照と言えなくもないっぽい。
LispやBoehmライブラリとかGCがあるけど参照じゃないかもしれないのは、普通じゃないからいいか…
0652デフォルトの名無しさん
2014/11/02(日) 04:39:08.11ID:Lqm+QUe+C#の構造体みたいな値型のやつが普通じゃないやつのつもりだったんだけど。
0653デフォルトの名無しさん
2014/11/02(日) 04:52:09.85ID:MZH26PPRと書いたが違うかも。
std::move(a)≒a.clone()みたいな感じ、まだまだ勉強不足だな。
右辺値参照はコピー回避だけじゃないっぽい。
0654デフォルトの名無しさん
2014/11/02(日) 04:55:25.20ID:6JfF1xXY正解。右辺値参照はクローン。
だからクローンがあればGCはいらないみたいな話をしているので
意味不明なんだよ。まるでGCをクローンの代わりに使用する
高速なコピーのための機能と勘違いしているかのよう
0655デフォルトの名無しさん
2014/11/02(日) 05:01:59.13ID:MZH26PPRまた一つ勉強させてもらった。
今度、Boehmライブラリをつぶさに読んでみるあるよ。
0656デフォルトの名無しさん
2014/11/02(日) 05:09:53.13ID:/XH1yScCスコープを抜けると自動的に消える値型
0657デフォルトの名無しさん
2014/11/02(日) 05:41:02.93ID:t2EpQ33q大丈夫なのこれ
0658デフォルトの名無しさん
2014/11/02(日) 05:45:37.49ID:Lqm+QUe+0659デフォルトの名無しさん
2014/11/02(日) 05:54:53.62ID:MZH26PPR0660デフォルトの名無しさん
2014/11/02(日) 06:59:02.74ID:rN0PF8rZな?GCは失敗だろ?
0661デフォルトの名無しさん
2014/11/02(日) 07:37:30.06ID:vxEoPS2x右辺値参照/move semantics は小さな技術で、これで大勢がかわるわけではないんだよ
GC は巨大技術、完全に行われるのであればソフトウェアの進歩に貢献する
>GCはOOPと決定的に親和性を欠く。
Java や C# を調べてみたほうがよい
0662デフォルトの名無しさん
2014/11/02(日) 08:54:42.61ID:67KOBBIPぶっちゃけGCじゃなくてJavaが嫌いっぽいしね
0663デフォルトの名無しさん
2014/11/02(日) 09:22:29.84ID:aOhxai0Oお前がGCを叩きたいだけってのがよくわかった。
0664デフォルトの名無しさん
2014/11/02(日) 09:53:14.06ID:TOrV8LyYJava は CG 無くすことはできないけど、C++ は CG 実装することできるからね
まあ、アセンブラさいこーって言ってるのと同じだけどな
0665デフォルトの名無しさん
2014/11/02(日) 10:11:05.75ID:iKbwWXgvしかし、糞が書いたC++を読むハメになると発狂できる
0666デフォルトの名無しさん
2014/11/02(日) 10:12:45.35ID:aXSCE3ny0667デフォルトの名無しさん
2014/11/02(日) 10:35:50.47ID:0u/vIpbIobjective-c
利点
メモリ管理が楽になる
欠点
循環参照を開放できない
参照カウントはアトミックな操作を必要とするので意外と重い(特にマルチスレッドマルチコアな今は)
*Garbage Collection
java/C#
利点
メモリ管理が楽になる
欠点
GCが動くと処理が止まる
*右辺値参照
C++
利点
値渡しを内部的に参照渡しと同じコストで書ける
欠点
shared_ptr,uniq_ptrをプログラマが使い分ける必要がある
循環参照を開放できない
RAIIでもnewで生成してdelete忘れれば当然メモリリーク
IDesposable/Closableのようなマーカーが無いのでオブジェクトがリソースつかむかどうかはコードを見なくてはならない。とするとRAIIの利点無いよね?
shared_ptr使えば良い?参照カウントは重いんだってば
右辺値参照があればGC不要(←???www)
0668デフォルトの名無しさん
2014/11/02(日) 10:43:05.04ID:aXSCE3ny関数スタックだけじゃないけど
0669デフォルトの名無しさん
2014/11/02(日) 11:11:40.10ID:5ZVCU8dyどうりで遅いわけだ
https://hacks.mozilla.org/2014/09/generational-garbage-collection-in-firefox/
0670デフォルトの名無しさん
2014/11/02(日) 11:38:12.82ID:vxEoPS2x>欠点
> GCが動くと処理が止まる
これはMark&Sweep とか古典的なGCでの話、今は GC で止まることはそんなにないと思う
まあ、決め手がなく、複合技で凌いでいる状況のようだが‥
0671デフォルトの名無しさん
2014/11/02(日) 11:39:29.66ID:vxEoPS2x現実の問題でスタックのみでやっていけるのか?
0672デフォルトの名無しさん
2014/11/02(日) 11:44:42.38ID:7FNYbovrIDisposable/Closableって、
派生クラスでリソース掴む可能性を見越して
基本クラスでinterface作っておかなきゃ
いけない欠陥品だよね。
基本クラスの機能とその派生がリソースを掴みうるかなんて殆ど相関無いのに。
0673デフォルトの名無しさん
2014/11/02(日) 11:51:12.95ID:J3FCyBvm50万行のアプリ開発したよ
0674デフォルトの名無しさん
2014/11/02(日) 12:13:11.39ID:aOhxai0Oなんで基本クラスで持たせないといけないと考えているのか
さっぱりわからん。
0675デフォルトの名無しさん
2014/11/02(日) 12:21:22.89ID:vxEoPS2xたしかに、なんでもかんでも GC、ではなく採用範囲を狭めたりできればもっとよくなると思うんだ
0676デフォルトの名無しさん
2014/11/02(日) 12:21:35.98ID:FPvqJpqAスタックじゃなければ20万行で済んだよ
0677デフォルトの名無しさん
2014/11/02(日) 12:28:39.22ID:dzrrxKH0処理クラスはコンストラクタにclass Aのオブジェクトのインスタンスを渡して生成する。
class AAはAの派生クラスだが、リソースを掴む実装として作る。例えばDBのコネクションとか。
class AAのインスタンスはOO的にはAと同様に使いたいところだが、disposeが適切に呼ばれるようになっていないから、Aと処理クラスにIDisposableを追加して、処理クラスの使用後にdisposeを呼ぶように修正しなきゃいけない。
0678デフォルトの名無しさん
2014/11/02(日) 12:38:13.75ID:MZH26PPR参照weak_ptrをプログラマが意図的に使うことで回避できるっぽ
い。
shared_ptr,uniq_ptrに加えてweak_ptrをプログラマが使い分け
る必要がある。
プログラマが四六時中気を付けなければならないわけでもない。
0679デフォルトの名無しさん
2014/11/02(日) 12:40:31.23ID:ueW82dqIそもそも設計が間違ってそうだが、class AAにIDisposableでいいじゃん
0680デフォルトの名無しさん
2014/11/02(日) 12:43:07.35ID:vxEoPS2xめんどくさすぎる‥
0681デフォルトの名無しさん
2014/11/02(日) 12:48:45.08ID:jU0EmFN8それは絶対ないルールだったから
BTSチケットも1/10,工数も70%程度だった
0682デフォルトの名無しさん
2014/11/02(日) 12:55:08.27ID:jgUgVjBvっぽい、というかもともとそう。
ただ、重要なのは各オブジェクトの所有権を持つ参照が常に一つだけであることなんだが、
なぜかweak_ptrはunique_ptrじゃなくshared_ptrからしか作れないんだよな。
0683デフォルトの名無しさん
2014/11/02(日) 12:55:44.15ID:e1EY+Kdsうん。俺もそう思った
派生クラスから継承元メソッドを呼びたいなら、そう書けばいいだけに見える
派生クラスのインスタンスは軽重元を内包しているんだし
ファクトリーでオブジェクトのライフタイムを管理したいなら、派生じゃなく、それじたいを
メンバーに持てばいいような気がします
0684デフォルトの名無しさん
2014/11/02(日) 12:58:56.96ID:7FNYbovr処理クラスの寿命がAAのインスタンスを作るところで把握できている場合はそれで済むが、それって要は処理クラスやAAの寿命が特定のスコープ内で閉じていると言うことで。
スタック上に直接インスタンス作れば
面倒なメモリ管理要らない状況と同じ
0685デフォルトの名無しさん
2014/11/02(日) 12:59:31.02ID:rN0PF8rZそこは問題だよね。
本来このスレでは、こういう議論をするべきなんだけどね。
0686デフォルトの名無しさん
2014/11/02(日) 13:05:21.31ID:MZH26PPRG1GCとか止まっている時間を分散しているようにも見える。
実用上はそれで大抵問題ない。
full GCを起こしにくくするGC内外のあの手この手もあるし。
>>680
些細なことでもプログラマの負担が増えるのは実は嫌いなんだ。
0687デフォルトの名無しさん
2014/11/02(日) 13:12:30.42ID:rN0PF8rZ0688デフォルトの名無しさん
2014/11/02(日) 13:14:35.97ID:iKbwWXgv単純な設計に落とし込めなくて
弱参照で頑張ったりするなら手作業で管理するほうがずっと楽だ
GC使う必要があって設計が難しくなるものもあるけど
それってかなり特殊だろう
0689デフォルトの名無しさん
2014/11/02(日) 13:16:14.45ID:MZH26PPRはーい(_´Д`)ノ~~さいならぁ
0690デフォルトの名無しさん
2014/11/02(日) 13:18:47.23ID:aOhxai0O単純な設計という曖昧な言葉じゃなくて
99.9%の設計にしか使えないって使えないって具体的に言ってよ。
残り0.1%の超複雑な設計には使えないかもね。
それがどんなものか、わからないけど。
多分君にも。
0691デフォルトの名無しさん
2014/11/02(日) 14:34:59.57ID:UQ+cnApOそれで何か問題あるか?
0692デフォルトの名無しさん
2014/11/02(日) 14:44:41.28ID:u/SB4U3Zunique_ptrを弱参照して何がしたいの?
0693デフォルトの名無しさん
2014/11/02(日) 15:27:31.05ID:jgUgVjBvそのまんま、unique_ptrの指すリソースへの弱参照が欲しいってことなんだが、何か疑問かなぁ?
リソース管理にunique_ptrを使う分には、基本的に(自身から繋がるチェインの先に自身の所有権を
移動することのないことだけ注意すれば)、循環参照の問題は起こらない。
ただしそれだけではネットワーク構造等を表現できないので、アプリケーションが要求するデータ
構造の表現としてweak_ptrを使いたい。
0694デフォルトの名無しさん
2014/11/02(日) 15:42:41.08ID:UQ+cnApO0695デフォルトの名無しさん
2014/11/02(日) 16:01:05.04ID:Jjs/RmF2先頭を指すshared_ptrにweak_ptrを入れることで循環しつつ先頭を指す強参照
がなくなったときに先頭から連鎖的に開放できるのが味噌なんでは?
だからshared_ptrから継承されると
0696デフォルトの名無しさん
2014/11/02(日) 16:16:20.35ID:fZ+YqMpY0697デフォルトの名無しさん
2014/11/02(日) 16:21:37.58ID:jgUgVjBvその連鎖的な解放ってのはunique_ptrでも同じことでしょ。
で、どっちにしろ強参照のループが存在していたらまずいわけだが、unique_ptrなら根元だけ押えて
おけばよい。shared_ptrだと、他に強参照が存在しないかあるいはいずれ確実に破壊されることを
プログラム側で保証しなければならない。
0698デフォルトの名無しさん
2014/11/02(日) 16:38:49.01ID:u/SB4U3Zどんなタイミングで死ぬかも判らない物でも参照していたいと…
その発想はなかった
0699デフォルトの名無しさん
2014/11/02(日) 16:42:19.56ID:jgUgVjBv0700デフォルトの名無しさん
2014/11/02(日) 16:50:00.78ID:Jjs/RmF2根元を押さえているのがunique_ptrなら、そもそもどうやって循環するの?
0701デフォルトの名無しさん
2014/11/02(日) 17:00:42.98ID:jgUgVjBv>>693の括弧書きのようなことをしなければ循環はしないね。
そのうえで、弱参照で循環構造を含むデータ構造の表現ができればよかったのに、という話。
0702デフォルトの名無しさん
2014/11/02(日) 18:28:43.29ID:UQ+cnApOunique_ptrは参照カウント式じゃないからweak_ptrは作られなかった
くらいの理由だと思うが
弱参照側でunique_ptrが破棄された事を監視する仕組みをちゃんと作るとオーバーヘッドありそうだしなぁ
0703デフォルトの名無しさん
2014/11/02(日) 18:49:28.70ID:rN0PF8rZオーバーヘッドは無い。
unique_ptr<>にweak_ptr<>が欲しい理由は、assert入れる程度の理由が
殆どだと思うけど、有ったほうが良いのは確か。
0704デフォルトの名無しさん
2014/11/02(日) 18:53:03.61ID:rN0PF8rZそこら辺から、shared_ptr<>が優遇されているように見えて、なんで無いんだ?
となってくるんだよ。
0705デフォルトの名無しさん
2014/11/02(日) 19:21:43.75ID:7FNYbovr結局shared_ptrと同様の構造にするしかなくて、オーバーヘッドが生じるけど許容できるの?
0706デフォルトの名無しさん
2014/11/02(日) 19:25:59.50ID:rN0PF8rZ削除子の絡みで元から実装できる構造になってる。
0707デフォルトの名無しさん
2014/11/02(日) 20:18:57.15ID:7FNYbovrweak_ptrは参照先のobject instanceとも
shared_ptrとも寿命が違うobjectで管理しないといけないのだから。
そのobjectの寿命管理のためにそのobject自身のweak_ptrからの参照カウント管理も必要だし。
0708デフォルトの名無しさん
2014/11/02(日) 20:25:49.12ID:rN0PF8rZもう少し勉強してから書き込まないと荒らしになる。
0709デフォルトの名無しさん
2014/11/02(日) 20:49:13.94ID:jgUgVjBv実装としては別に、「所有権を共有できないshared_ptr」でいいんだがなぁ。
0710デフォルトの名無しさん
2014/11/02(日) 20:57:34.40ID:7FNYbovrいや、現実に実装されていないものが
簡単に実装できるといったのに、
挙げてきたものが的はずれ過ぎるだろ。
shared_ptrのweak_ptr実装知っているのか。
なぜunique_ptrやboost::intrusive_ptrにweak_ptr相当のものが
実装されていないのか考えてみたか?
0711デフォルトの名無しさん
2014/11/02(日) 21:17:45.92ID:rN0PF8rZ削除子をカスタムデリータと読み替えるからそう思うんじゃないの?
0712デフォルトの名無しさん
2014/11/02(日) 21:20:07.27ID:mACG5wDAのメソッドシグネチャーも手を入れそうだけど。自分的にはGC自体はどうでも
いいけど、さすがに、循環参照対策で第一引数に移譲元のクラスを渡すのは古
臭く感じる
0713デフォルトの名無しさん
2014/11/02(日) 22:29:55.80ID:IyW8WEC0なら shared_ptr を継承してインターフェースを絞ったクラスを作ればいいんじゃね?
0714デフォルトの名無しさん
2014/11/03(月) 02:14:06.66ID:id4CCXJ80715デフォルトの名無しさん
2014/11/03(月) 22:32:57.90ID:/tG/79z70716デフォルトの名無しさん
2014/11/03(月) 22:37:49.77ID:v6YDSaifhttp://tatsu-zine.com/books/gcbook
0717デフォルトの名無しさん
2014/11/03(月) 22:46:35.04ID:/tG/79z7どうもです。Javaでの実装は入ってないみたいだけど、買ってみるわ
0718デフォルトの名無しさん
2014/11/04(火) 02:40:24.65ID:KSMLMRdV筆者のwiki
http://seesaawiki.jp/w/author_nari/d/GC
0719デフォルトの名無しさん
2014/11/04(火) 14:02:38.45ID:OXvDS9Yh0720222
2014/11/04(火) 17:22:03.66ID:6g/0xydT言語仕様ざっと見したけど無駄に複雑な仕様だとしかおもえん
メリットなにさ
0721デフォルトの名無しさん
2014/11/04(火) 21:46:56.28ID:GrqJXM5/ありがたい。じっくり読みます!!
0722デフォルトの名無しさん
2014/11/11(火) 00:17:04.72ID:JD7Ik4Uf0723デフォルトの名無しさん
2014/11/11(火) 10:16:31.61ID:jfV1CRrh0724デフォルトの名無しさん
2014/11/11(火) 21:21:07.74ID:tLYldMk+0725デフォルトの名無しさん
2014/11/11(火) 22:55:03.16ID:DpN/sAby素人乙でいいだろ w
http://www.pbm.com/~lindahl/real.programmers.html
0726デフォルトの名無しさん
2014/11/13(木) 06:33:15.09ID:zPEEZtXf解放処理まで全部入れる
バグで解放漏れしたら、GCさんすまんがよろしく方式がただしいわけだ
0727デフォルトの名無しさん
2014/11/13(木) 06:38:37.51ID:zPEEZtXfこれは
ソースを綺麗に書くことができるようになった証拠の一つ
よって解放までやる癖をつけよう
0728デフォルトの名無しさん
2014/11/13(木) 08:01:21.90ID:Doj5jcuD0729デフォルトの名無しさん
2014/11/13(木) 08:29:08.50ID:mNvWhrE90730デフォルトの名無しさん
2014/11/13(木) 09:12:50.42ID:Doj5jcuD振出しに戻る
0731デフォルトの名無しさん
2014/11/13(木) 09:13:48.91ID:7EI8L7kdテストが足りん
0732デフォルトの名無しさん
2014/11/13(木) 10:50:15.82ID:DYELcWQQ0733デフォルトの名無しさん
2014/11/13(木) 10:55:04.64ID:5Oh59ksY0734デフォルトの名無しさん
2014/11/13(木) 10:56:51.80ID:a0S0K7Slメモリ管理などオワコンなどと主張したり、
それで結局老害扱いしてたC++erやJava勢やC#勢の逆襲食らってたり
例外はないこともないが、最近の若いプログラマってアホばっかなのでは?
とりわけJavaScriptとRubyしか触ってないみたいな連中はやばすぎる
幼稚園の頃からBASIC→マシン語→C言語→C++→Java→LLと順当に触ってきて
きちんと計算機科学も修めている俺からすると、実にチャラいというか、
基礎がなってないためにしでかしてる勘違いの数々にまるで自覚がないというか
CPUの息吹を肌で感じてないんだよな・・・
0735デフォルトの名無しさん
2014/11/13(木) 11:16:49.11ID:7ZjHj42h0736デフォルトの名無しさん
2014/11/13(木) 12:10:00.51ID:4SjIbFGA0737デフォルトの名無しさん
2014/11/13(木) 13:22:55.62ID:UimbrwPY0738デフォルトの名無しさん
2014/11/13(木) 15:40:25.56ID:yPJZ4FD80739デフォルトの名無しさん
2014/11/13(木) 15:53:58.24ID:iet/U29a0740デフォルトの名無しさん
2014/11/13(木) 17:31:16.12ID:s/YjhiVeRaid組んでるからいいけどRaid0
0741デフォルトの名無しさん
2014/11/13(木) 17:42:39.39ID:s/YjhiVeそれすなわち、グダグダプログラムを書かず、適切な部品化につながる
やっぱりGCはないものと考え、プログラミングする。
それでも、人間だものミスはする。
それはGCさんうまいこと拾ってちょと。
これが正しそうだね
0742デフォルトの名無しさん
2014/11/13(木) 20:59:49.37ID:4SjIbFGAGC使うか使わないかの二択なんだよな
0743デフォルトの名無しさん
2014/11/13(木) 21:49:24.00ID:6mw95AhO0744デフォルトの名無しさん
2014/11/13(木) 21:52:01.83ID:6mw95AhOんだんだ。これが正解だと思う。メモリ管理だけじゃない。プログラミングは。でも、どれも軽視できない。
結果として、読みやすい・保守しやすい・修正しやすいプログラムは、すべてのプログラミング技法・作法・マナーから生まれる。
0745デフォルトの名無しさん
2014/11/13(木) 22:24:17.01ID:Doj5jcuD異端は滅すべし
0746デフォルトの名無しさん
2014/11/13(木) 22:32:27.16ID:7ZjHj42hルールという言葉には強制するという意味があるけど、無自覚に他人に物事を強制する
べく「マナー」って言葉を便利に使ってる奴が多過ぎる。
0747デフォルトの名無しさん
2014/11/13(木) 22:49:05.91ID:uOTGwQ1cで、プログラミングのマナーってたとえばどのようなもの?>>744
0748デフォルトの名無しさん
2014/11/13(木) 23:12:00.88ID:UimbrwPYダングリングポインタ問題、C++で生ポ縛り(あくまで勉強用の、ミニゲームのコードね)してたら出くわしたな
んで結局、shared_ptrやweak_ptrモドキを作るところに落ち着くっていうね
普段はスマポべったりだったから便利ポインタぐらいの認識だったが、あのとき「ああこれ必須機能なんだな」って思った
0749デフォルトの名無しさん
2014/11/13(木) 23:25:10.56ID:uOTGwQ1c0750デフォルトの名無しさん
2014/11/13(木) 23:51:15.27ID:Doj5jcuD狂信者がマナーを語るとは片腹痛いわ
0751デフォルトの名無しさん
2014/11/14(金) 00:47:29.71ID:0NdzO4Gj0752デフォルトの名無しさん
2014/11/14(金) 06:31:30.00ID:k3X6Z6emどうすれば自分以外が読んでも理解しやすいかを考えること
0753デフォルトの名無しさん
2014/11/14(金) 07:03:25.40ID:f85sxZ2s0754デフォルトの名無しさん
2014/11/14(金) 08:04:36.77ID:sDSR2Iuo0755デフォルトの名無しさん
2014/11/14(金) 08:20:05.94ID:I/Kn10CW長時間走らせるC#アプリだってメモリーリークの監視検証しないといけないのは同じだし
0756デフォルトの名無しさん
2014/11/14(金) 10:15:31.34ID:+CsfViMM0757デフォルトの名無しさん
2014/11/14(金) 10:31:42.14ID:0NdzO4Gj0758デフォルトの名無しさん
2014/11/14(金) 10:41:38.76ID:IAbvV61j0759デフォルトの名無しさん
2014/11/14(金) 11:38:08.99ID:HTFWgUOI"JAP"呼ばわりにマナーがあるのかよ、遺伝子障害のトンスラー
0760デフォルトの名無しさん
2014/11/14(金) 11:59:56.20ID:bBfVN72A0761デフォルトの名無しさん
2014/11/14(金) 16:51:51.19ID:9h3dP9ft俺様を誰だと?w
0762デフォルトの名無しさん
2014/11/14(金) 16:53:33.92ID:pj9oji6u推薦図書/必読書のためのスレッド 74
588 : ◆QZaw55cn4c [sage]:2014/11/13(木) 21:11:12.54 ID:uOTGwQ1c
>>585
C/C++ はなんといっても「ポインタ」の存在が重要
C/C++ は変数の格納領域(スタックかヒープか)を常に意識しなければならない
C/C++ にはGC はなく、new したものは自分で delete しなければならない、というか、delete を適切に置けなければ C/C++ の意味がない
【初心者歓迎】C/C++室 Ver.93【環境依存OK】
618 :デフォルトの名無しさん[sage]:2014/11/13(木) 21:39:30.68 ID:uOTGwQ1c
>>616
GCは強力だからね‥
ATL/WTL Part7
272 :デフォルトの名無しさん[sage]:2014/11/13(木) 22:44:06.22 ID:uOTGwQ1c
MFCもただの時代か?
GCは失敗。メモリは自分で管理せよ!
747 :デフォルトの名無しさん[sage]:2014/11/13(木) 22:49:05.91 ID:uOTGwQ1c
ルールと書くと「それは誰が決めたの?」といわれるからね、「マナー」は主体がないからお気楽に使う奴らが多いね、
で、プログラミングのマナーってたとえばどのようなもの?>>744
GCは失敗。メモリは自分で管理せよ!
749 :デフォルトの名無しさん[sage]:2014/11/13(木) 23:25:10.56 ID:uOTGwQ1c
そういうのはオレオレアロケータでラップすれば解決できる話
0763デフォルトの名無しさん
2014/11/14(金) 19:33:54.10ID:ZvhoBJvC0764デフォルトの名無しさん
2014/11/14(金) 22:43:01.55ID:0NdzO4Gj0765デフォルトの名無しさん
2014/11/19(水) 00:22:30.96ID:XpwFg3dDhttp://fox.2ch.net/test/read.cgi/poverty/1416286592/
0766デフォルトの名無しさん
2014/11/28(金) 05:58:50.67ID:NEjj49Dw?
0767デフォルトの名無しさん
2014/11/29(土) 00:04:22.19ID:+lO93JWxスマートポインタ型同士で内包する生のポインタを共有したり譲りあったりすると一気に破綻する
ヒープオブジェクトの所有権とか解放責任を細かく管理したいときは生のポインタの方が楽かもね
0768デフォルトの名無しさん
2014/11/29(土) 01:18:01.93ID:LkFcK9EV所有者以外がウィークポインタ使えば済む話じゃね?
0769デフォルトの名無しさん
2014/12/16(火) 09:39:36.73ID:7mh816Ug0770デフォルトの名無しさん
2014/12/16(火) 11:31:37.70ID:sfpQIcv20771デフォルトの名無しさん
2014/12/16(火) 12:03:39.06ID:7mh816Ugboehmとか不要だった
0772デフォルトの名無しさん
2014/12/16(火) 12:40:19.81ID:e7BH2hjc0773デフォルトの名無しさん
2014/12/17(水) 16:49:30.80ID:Q6JaUBJUヒープ利用技術は宗教ばかりなのはなぜ?
0774デフォルトの名無しさん
2014/12/17(水) 18:13:18.99ID:HHNVnNJE0775デフォルトの名無しさん
2014/12/19(金) 06:36:24.08ID:VhJmm+7Eが正しいわけか
0776デフォルトの名無しさん
2014/12/19(金) 19:07:33.27ID:NKhHFSHt0777デフォルトの名無しさん
2014/12/19(金) 19:09:46.47ID:WeOUNQD70778デフォルトの名無しさん
2014/12/19(金) 19:37:18.70ID:l1Xa7EUK0779デフォルトの名無しさん
2014/12/19(金) 19:57:54.17ID:NKhHFSHt0780デフォルトの名無しさん
2014/12/19(金) 21:43:56.82ID:rAA+xYtY0781デフォルトの名無しさん
2014/12/20(土) 00:36:54.87ID:XQnyrT4Egcメソッドを呼ぶんじゃ駄目なんでしょうか
0782デフォルトの名無しさん
2014/12/20(土) 06:12:41.60ID:K1XVQPE7boehmちゃん!
0783デフォルトの名無しさん
2014/12/20(土) 11:56:28.60ID:NHI2U8yT0784デフォルトの名無しさん
2014/12/20(土) 19:08:06.41ID:n7PPC6JL0785デフォルトの名無しさん
2014/12/21(日) 14:21:35.70ID:vbD8hcbj0786デフォルトの名無しさん
2014/12/21(日) 15:38:56.53ID:qczjiP1Y0787デフォルトの名無しさん
2014/12/21(日) 16:05:40.72ID:optiUlKXコア部分じゃなければそれが正解だろう
0788デフォルトの名無しさん
2014/12/21(日) 16:50:14.63ID:2iwIfbgZ0789デフォルトの名無しさん
2014/12/21(日) 16:51:20.06ID:e2fIb+kJ>>786
要らなくなったら初期化、を徹底すればいい、多少無駄だがしかたがない
0790デフォルトの名無しさん
2014/12/21(日) 19:18:20.08ID:qczjiP1Yポインタと参照先が1対1ならそれで十分なんだろうけど
複数のポインタが同じアドレスを参照してる場合だと全部初期化するの面倒だしミスが起こりそう
0791デフォルトの名無しさん
2014/12/21(日) 23:27:04.03ID:UQ1FARTYそもそも確保・解放がenter・leaveに単純に対応してるならmallocなどせず、
ローカル変数で直接、値で作ればいい。
スタックが足りなくなるとか混ぜっ返す組込み屋には、ハイハイ組込み組込みと
返しときゃいいんだよ。
0792デフォルトの名無しさん
2014/12/21(日) 23:27:55.55ID:UQ1FARTYそうだね。特に C++ にはテクニカルタームとして「参照」があるから。
0793デフォルトの名無しさん
2014/12/22(月) 00:30:52.55ID:VRBNRD9fポイント、だと逆にポインタが前提の感じがしてしまうし
0794デフォルトの名無しさん
2014/12/22(月) 01:04:52.22ID:+BOkQn0Hスタック足りなくなるような組込RTOS案件にはGCなんか出てこないから心配ない
0795デフォルトの名無しさん
2014/12/22(月) 07:14:04.27ID:t6bC3Afj0796デフォルトの名無しさん
2014/12/22(月) 11:14:21.13ID:vmBo1gPk0797デフォルトの名無しさん
2014/12/22(月) 15:08:39.33ID:3ldau/FD0798デフォルトの名無しさん
2014/12/22(月) 22:23:28.06ID:3C7mXd7rC++ だけではない、教育用途言語 pascal にもあるくらいだ‥
0799デフォルトの名無しさん
2014/12/22(月) 22:52:39.45ID:ChKJ/CvNなんでdelphiにgcつけなかったんだろ
0800デフォルトの名無しさん
2014/12/22(月) 22:57:06.11ID:7s6/x5ix0801デフォルトの名無しさん
2014/12/22(月) 23:02:34.56ID:+BOkQn0HGCなんて無駄な物付けて全体の実行速度落とすかしないでしょ、それに.NETとはもう決別したんでしょ
0802デフォルトの名無しさん
2014/12/22(月) 23:05:15.85ID:18uotQck0803デフォルトの名無しさん
2014/12/22(月) 23:12:00.05ID:jgCJLzelC/C++「」
0804デフォルトの名無しさん
2014/12/22(月) 23:12:10.07ID:+BOkQn0H0805デフォルトの名無しさん
2014/12/22(月) 23:50:21.66ID:vmBo1gPk同じ言葉を使ってるからといって同じものじゃないが。
0806デフォルトの名無しさん
2014/12/23(火) 10:32:32.83ID:xE/EZEvsあれは無駄に機能増やして鈍重化したのもあると思う
…と言うか一番は、個人開発者に人気だったのに
エンタープライズメインに切り替えて個人開発者軽視したことじゃないかな
0807デフォルトの名無しさん
2014/12/23(火) 10:36:15.47ID:XytUgotQ当時Delphiって聞くとなんというか、ときめきのようなものを感じてた。
C++Builderとかコードウォーリアーとかなつい。
0808デフォルトの名無しさん
2014/12/23(火) 11:29:30.67ID:S/HWfghBC++Builder は頑張れば C# の地位になれたと思う
0809デフォルトの名無しさん
2014/12/23(火) 11:35:28.11ID:h/pRl+lt0810デフォルトの名無しさん
2014/12/23(火) 12:40:52.69ID:BmzYTsD1その頃のアプリ開発環境はBorlandの方が進んでた
VBの登場とMSDNでの囲い込みで徐々に形成逆転したのかな
0811デフォルトの名無しさん
2014/12/23(火) 14:32:44.54ID:egk/n0nzc言語って組込み用アセンブリ出力させるためのスクリプトじゃん
0812デフォルトの名無しさん
2014/12/23(火) 14:53:25.17ID:t58aH8JT0813デフォルトの名無しさん
2014/12/23(火) 21:42:05.30ID:vkaSmtMbMVCとかEFとかフレームワークも充実してるし
0814デフォルトの名無しさん
2014/12/24(水) 01:00:29.67ID:+eSW33ht0815デフォルトの名無しさん
2015/01/30(金) 11:04:08.94ID:Tg9FBOLXなんでそんなに毛嫌いするんだ?
0816デフォルトの名無しさん
2015/01/30(金) 14:03:24.80ID:7u+Ygwkn0817デフォルトの名無しさん
2015/01/30(金) 19:18:19.16ID:2guE8F7NこんなんでC#がクロスプラットフォームじゃないとか批判してるのはお笑い
0818デフォルトの名無しさん
2015/01/31(土) 06:23:21.40ID:nEfu9fTE0819デフォルトの名無しさん
2015/01/31(土) 20:29:07.26ID:3AAhUm8532bit CPUでもメモリさえ潤沢ならよほどのことがないと固まらない。
それでも不足なら64bit CPUと大量のメモリで解決できる。
0820デフォルトの名無しさん
2015/02/01(日) 14:00:44.74ID:sjXjc1T+0821デフォルトの名無しさん
2015/02/01(日) 16:03:02.87ID:aI2n/lTkGCの諸問題のうち、特に停止問題を重視するならARCってけっこう手軽な現実解だと思うんだけども
0822デフォルトの名無しさん
2015/02/01(日) 16:34:50.09ID:MVlYWEMFARCが全部を管理してるわけじゃないし、
全部を管理するなら参照カウント型のGCそのものだよね。
0823デフォルトの名無しさん
2015/02/01(日) 16:51:21.20ID:Fr1bqegOプログラム構造じゃないと使いにくいからだろう。
CocoaフレームワークあってのARC/autoreleaseなわけで。
0824デフォルトの名無しさん
2015/02/01(日) 21:31:23.15ID:ZIbzlnggDelphi/C++Builderのモバイル用コンパイラもARC。iOSだけじゃなくてAndroidでもARC。
0825デフォルトの名無しさん
2015/02/02(月) 00:35:02.66ID:VwUQhlCU寡聞でしたすみません勉強になります
0826デフォルトの名無しさん
2015/02/10(火) 14:25:51.02ID:NjPy1BDR参照カウンタ式はプログラマが循環参照の問題を
意識してコーディングしなきゃならない。
新言語やGCの無かった言語への追加機能ならともかく、
循環参照なにそれweakなんて知らんよでやってきた言語に
ぽいっと追加するわけにはいかないんだろうな。
循環参照はマズイから必要なら weak 参照使えその代わり
GC で止まらないぞ、っていう Java も Google あたりが出せば
普及する気もするけど…
0827デフォルトの名無しさん
2015/02/16(月) 23:54:59.92ID:dr44zIpp0828デフォルトの名無しさん
2015/02/17(火) 01:45:26.73ID:ICEN75ja0829デフォルトの名無しさん
2015/03/18(水) 00:04:55.11ID:kd3iUKLLXcode付属のメモリモニターツールが強力で循環参照しているオブジェクトを
一発で見つけられる。そういうのがないとC言語のMalloc/Free張りに嵌るかもね。
昔、OmniWebとかよく落ちていたし。
0830デフォルトの名無しさん
2015/04/08(水) 20:23:11.17ID:2PDo66DT0831デフォルトの名無しさん
2015/04/08(水) 20:26:31.03ID:Q0GkT+QT0832デフォルトの名無しさん
2015/04/09(木) 14:12:21.41ID:DeN9c2ta0833デフォルトの名無しさん
2015/05/19(火) 21:59:26.30ID:X2H7PVvqガベージ コレクターの更新
ガベージ コレクターの新しいモードでは、
メモリに関連した特定の状況下ではガベージ コレクションを行いません。
この新しいモードは、少なくとも
GC CPU の使用に関連する連続した計算が必要なワークロードで重要です。
新しいモードでは、No GC Region に入る前提条件として
使用可能な特定のメモリ容量を指定することができます。
No GC Region では、ガベージ コレクションは行われません。
GC.Collect などでコレクションが明示的に要求された場合や、
最初に指定したメモリ容量が不足した場合にガベージ コレクションが開始されます。
新しいモードには複数の構成ポイントがあり、No GC Region 内で使用して小さなオブジェクト ヒープと
大きなオブジェクト ヒープに別々に使用できるメモリを指定することもできます。
0834デフォルトの名無しさん
2015/06/08(月) 22:17:10.53ID:WDSTv9CT0835デフォルトの名無しさん
2015/06/09(火) 05:13:26.11ID:GoGfc5xm参照カウンタとかレベルになるともうGCでいいやってなるけど
0836デフォルトの名無しさん
2015/06/10(水) 20:09:12.46ID:H0fWrTpTラップしたクラスでえぇやないの、一回は経験した方がいい
0837デフォルトの名無しさん
2015/06/14(日) 00:00:44.30ID:mJCRiql2C++使用は不可避だが、技術者のほとんどがメモリを面倒見切れなかった。
仕事なんだから勉強しようよ
0838デフォルトの名無しさん
2015/06/14(日) 12:29:02.48ID:Iu9IjEax0839デフォルトの名無しさん
2015/06/14(日) 17:42:43.85ID:IljfXwE2ちゃんとデストラクタ・RAII使えばそんなことにはならない。
0840デフォルトの名無しさん
2015/06/14(日) 21:39:41.12ID:kYk1Egwl0841デフォルトの名無しさん
2015/06/18(木) 16:51:28.49ID:z2QMHecM0842デフォルトの名無しさん
2015/08/16(日) 10:48:06.69ID:GM3HFxJzスマホアプリ開発でそれができる言語はあるのだろうか
0843デフォルトの名無しさん
2015/08/16(日) 11:01:46.23ID:dOWpBwV80844デフォルトの名無しさん
2015/08/16(日) 16:38:33.96ID:n3y5gwZbDelphi「…。」
0845デフォルトの名無しさん
2015/09/16(水) 10:58:10.00ID:kzJo4y5o0846デフォルトの名無しさん
2015/09/23(水) 19:20:36.84ID:OG7e8mvpこれ関係ある?
0847デフォルトの名無しさん
2015/09/26(土) 20:21:02.25ID:ah/jTrX4CPUパワーでゴリ押しするしかない
0848デフォルトの名無しさん
2015/10/01(木) 19:08:03.50ID:TrZJtSkW0849デフォルトの名無しさん
2015/10/30(金) 16:44:42.54ID:JduWWFlHFlashの重さって言語やGCよりレンダリング周りだと思う。ブラウザ上というOSのサポート受けにくいところでマルチ環境サポートしてるから無理もないけどね
0850デフォルトの名無しさん
2015/10/30(金) 18:43:36.28ID:l8pLYr5TLLぐらいならGCもありだと思うけどJavaやC#でGC導入したのは
確かに失敗だったと感じた
特にJavaはサーバーサイドでもよく使われるしGCのせいで安全性を失い不安定になってたら本末転倒
JavaがGCを導入して、所有権の概念を放棄したことで失ったものとして
スコープに閉じられたファイナライザ(RAII)、
値型とオブジェクト型に対する一様な操作性、
自動かつ一様なコピー、メモリ安定性…などなど色々あって、
逆にややこしくしてる上に安全性も低くなってる
特にスコープが活用できないというのは安全性の面で致命的
C++のせいでメモリ管理は難解で危険という風潮が強いけど
それはC++の、Cとの互換性やゼロオーバーヘッドの方針が
大きく影響してて、最初からunique, share, weak, rvalue refに絞っていれば難しいものではないしより安全
0851デフォルトの名無しさん
2015/10/30(金) 20:30:59.91ID:I9q36634VBAで、オブジェクトを使ったプログラミングするとき
Set 変数 = オブジェクト
でやると最後に必ず
Set 変数 = Nothing
をやらないと気がすまないwww
0852デフォルトの名無しさん
2015/10/30(金) 20:49:06.93ID:zUZa21Gd0853デフォルトの名無しさん
2015/10/30(金) 20:55:59.72ID:I9q36634ハイカラだろ〜?って感じなんでしょ。
0854デフォルトの名無しさん
2015/10/30(金) 21:06:55.81ID:KZ39TxmE0855デフォルトの名無しさん
2015/10/30(金) 21:34:23.77ID:7o442mgOすき放題やってると終了処理がひどい感じ
0856デフォルトの名無しさん
2015/10/30(金) 22:47:38.78ID:S9hryATs曖昧?
0857デフォルトの名無しさん
2015/10/30(金) 22:50:03.52ID:KZ39TxmE0858デフォルトの名無しさん
2015/10/31(土) 05:16:01.52ID:VXrj8Wc8それ Set の話と関係ないでしょ
0859デフォルトの名無しさん
2015/10/31(土) 10:58:39.37ID:1wsIrmuV0860デフォルトの名無しさん
2015/10/31(土) 12:36:13.44ID:f8Ij0rc/解放処理してない人は、エラーチェックまで雑な感じがする。
根拠となる統計があるわけではないが。
0861デフォルトの名無しさん
2015/10/31(土) 13:31:15.59ID:1wsIrmuVなんとかしてくれんかな
初心者にやさしくない
どこぞの糞言語
0862デフォルトの名無しさん
2015/10/31(土) 18:35:48.73ID:YhCpXg1Eそれ言語と関係ないでしょ
0863デフォルトの名無しさん
2015/10/31(土) 19:49:55.89ID:Xr/OK5J5Lispだろ
0864デフォルトの名無しさん
2015/10/31(土) 19:55:37.90ID:Xr/OK5J5ロジックに集中できるように
管理しないでいいようにしたんだよ。
consセルを管理しながらLispのコードを書けるか?
Javascriptの主要ライブラリを自前メモリ管理で書き直してみてくれ。
0865デフォルトの名無しさん
2015/10/31(土) 20:20:16.61ID:A2a2AvMElinked list管理しながらCのプログラム書いてますが、何か?
0866デフォルトの名無しさん
2015/10/31(土) 20:45:22.20ID:1wsIrmuV0867デフォルトの名無しさん
2015/10/31(土) 23:37:30.34ID:ELtLmf7b0868デフォルトの名無しさん
2015/11/01(日) 06:11:45.31ID:1jUBhaITいや、GCが増やしたというよりメモリは参照切れたら勝手に解放やってくれるから考えなくていい。
という風にしてしまったのが間違いだったんだろう。
0869デフォルトの名無しさん
2015/11/01(日) 08:51:32.70ID:mbCEcc3w先に必要なメモリを大きく確保したから....
0870デフォルトの名無しさん
2015/11/01(日) 10:50:32.39ID:Q3B65vhlメモリの管理から解放されるには
プログラムの構造をとにかくシンプルにすること
プログラムの可読性をとにかく上げること
に尽きるような気がしてきた
0871デフォルトの名無しさん
2015/11/01(日) 10:53:00.29ID:mbCEcc3w0872デフォルトの名無しさん
2015/11/01(日) 11:29:33.13ID:CO8H7P/QGC(ガベージコレクション)と同じように
PGC(ページメモリガページコレクション)も問題である
ページメモリはHDDやSSDを意味する
0873デフォルトの名無しさん
2015/11/01(日) 11:31:55.35ID:CO8H7P/Qいつまでもプロセスが残ってゾンビ化するブラウザがあるらしい。
ゾンビ化はメモリ開放しないから再起動でメモリを食いつぶす。
http://18tv.x.fc2.com/?v=4V90AmXnguw&UUulYu1HEIa7f70L2lYZWHOw/18TV
http://i1.ytimg.com/vi/4V90AmXnguw/mqdefault.jpg
0874デフォルトの名無しさん
2015/11/01(日) 12:03:13.03ID:CO8H7P/Q0875デフォルトの名無しさん
2015/11/01(日) 12:11:03.54ID:CO8H7P/Q0876デフォルトの名無しさん
2015/11/01(日) 15:15:46.75ID:VSkAtBKLhttp://www.ammanu.edu.jo/wiki1/ja/articles/%E3%83%96/%E3%83%A9/%E3%82%A6/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BC.html
0877デフォルトの名無しさん
2015/11/01(日) 15:46:56.88ID:VSkAtBKLhttps://www.google.co.jp/search?q=%E3%82%BE%E3%83%B3%E3%83%93%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%BA&num=100&ie=utf-8
0878デフォルトの名無しさん
2015/11/01(日) 15:49:09.88ID:VSkAtBKLhttp://blogs.yahoo.co.jp/fireflyframer/33432553.html
0879デフォルトの名無しさん
2015/11/01(日) 17:13:37.01ID:mbCEcc3w0880デフォルトの名無しさん
2015/11/01(日) 21:12:16.73ID:Q3B65vhlnullセットしたりしてもスグにメモリが解放されるわけではない。
って言い出す人いるけど、根本的に論点がズレてるよなぁといつも思う
0881デフォルトの名無しさん
2015/11/02(月) 04:13:15.63ID:lTmbmRfGGC(ガベージコレクション)と同じように
PGC(ページメモリガページコレクション)も問題である
ページメモリはHDDやSSDを意味する
0882デフォルトの名無しさん
2015/11/02(月) 04:18:08.53ID:lTmbmRfGhttps://nl.wikipedia.org/wiki/ISO_25010
http://iso25000.com/index.php/en/iso-25000-standards/iso-25010
http://iso25000.com/images/header-en.png
ISO/IEC25010 品質モデル 長らくソフトウェア品質モデルとして親しまれてきた ISO/IEC9126 が
ISO/IEC25010(ISO/IEC 25000 SQuaRE シリーズの一部) として補強、改訂されました
http://snsk.hateblo.jp/entry/20130422/p1
http://cdn-ak.f.st-hatena.com/images/fotolife/s/shinsuku/20130422/20130422070549.png http://cdn-ak.f.st-hatena.com/images/fotolife/s/shinsuku/20150821/20150821114857.png http://cdn-ak.f.st-hatena.com/images/fotolife/s/shinsuku/20130422/20130422070550.png
0883デフォルトの名無しさん
2015/11/02(月) 07:20:19.25ID:lVVXa7jtココで使うのやめますよ。
というのを明示してわかりやすくする。
というが目的でやってるのに。
0884デフォルトの名無しさん
2015/11/02(月) 11:36:06.56ID:xHrq3TrFhttp://www.youtube.com/watch?v=sqrYK4_55IY&list=RDsqrYK4_55IY
Windows7からWindows10へアップグレードしてみた(その2)
http://www.youtube.com/watch?v=jIcJ3DnBtCQ&list=RDjIcJ3DnBtCQ
windows10無償アップグレードしたら既存ソフトも問題なく動いた 。 互換性は?
http://www.youtube.com/watch?v=G5QblMTRoSQ&list=RDG5QblMTRoSQ
0885デフォルトの名無しさん
2015/11/02(月) 11:36:45.06ID:xHrq3TrFhttp://aurorawave.atspace.tv/?sop:v/ZBwEmgdqB1c&RDZBwEmgdqB1c http://i1.ytimg.com/vi/ZBwEmgdqB1c/mqdefault.jpg #AuroraWaveTV
0886デフォルトの名無しさん
2015/11/02(月) 13:42:54.15ID:0X8mwavh覗かれまくり?
0887デフォルトの名無しさん
2015/11/03(火) 18:54:10.92ID:UaU3DexI下手くそはそこまで思考は回らない
0888デフォルトの名無しさん
2015/11/03(火) 19:06:56.99ID:cqWeRJO4メモリセーフかつ、同期が必要なもののみ識別できる仕様なのでC++より速くなるおまけつき
Rustいいわこれ
0889デフォルトの名無しさん
2015/11/03(火) 19:40:05.40ID:BP9FbeAH0890デフォルトの名無しさん
2015/11/06(金) 09:12:46.09ID:elYX0nut0891デフォルトの名無しさん
2015/11/06(金) 19:14:19.26ID:XATvt4ap0892デフォルトの名無しさん
2015/11/06(金) 19:45:29.43ID:dYcAh74Vゴミ集めなんてまず社会の最低辺の職業?を連想してしまうし
ゴミ集めは結果的に起こるものであって、それが目的ではないのに
手段としてのGCばかりが注目されてしまった
0893デフォルトの名無しさん
2015/11/06(金) 21:27:35.02ID:KbACg+rImalloc / free の問題を別の問題にすり替えただけかもね
GCのおかげでコーディングは楽になったんだけど
0894デフォルトの名無しさん
2015/11/07(土) 00:08:44.08ID:4rC6rLR0だから殆どの言語でGCがあるのが普通であり、C/C++だけ特異な言語という印象。
0895デフォルトの名無しさん
2015/11/07(土) 00:45:30.50ID:5oXh6/d1ネイティブ寄りでGC使ってないところで有名どころというとARCやってるAppleくらいかな?obj-cとswift
obj-cはMac開発環境では一時期GC試してたけどね
0896デフォルトの名無しさん
2015/11/07(土) 11:25:53.08ID:D4Pma+c4こっちの意見のほうが正しかったと遠く時は流れて証明されたということなんだろうね。
0897デフォルトの名無しさん
2015/11/07(土) 11:32:16.48ID:Lam93S6qどういう事だよ…オラクル!
0898デフォルトの名無しさん
2015/11/07(土) 18:00:07.40ID:D4Pma+c40899デフォルトの名無しさん
2015/11/08(日) 00:26:03.18ID:QYMRsb+2メモリもついでにやったらいいさ。
0900デフォルトの名無しさん
2015/11/08(日) 00:28:30.61ID:ZvdbGqm70901デフォルトの名無しさん
2015/11/08(日) 01:12:31.37ID:hMKFsgJiそんな中途半端な数字じゃなくて
メモリが無限にあればって言えばいいじゃんw
0902デフォルトの名無しさん
2015/11/08(日) 01:16:43.93ID:ddjlcS4O無論そりゃ当面足りるだろうけどさ、現時点で技術的にもコスト的にも無理な話されても困るよ
100ペタ使える時代が来たとして、その時代のプログラマー達は、640kbで足りてない我々のように「100ペタじゃ足りねー」って言ってる気がするなあ
そんときGCがあるのか知らんが
0903デフォルトの名無しさん
2015/11/08(日) 01:33:34.82ID:RsBJWU9a0904デフォルトの名無しさん
2015/11/08(日) 02:08:20.95ID:hMKFsgJi> ゲイツが「メモリは640kbもあれば充分だ」と言った話を思い出すなあ
それ言ってないらしいよw
0905デフォルトの名無しさん
2015/11/08(日) 02:19:05.00ID:ddjlcS4O0906デフォルトの名無しさん
2015/11/08(日) 02:22:06.24ID:hMKFsgJi「640KBのメモリがあれば十分なはずだ」なんてことを言った覚えはないんだけど。
2005年のWinHECは、ビル・ゲイツ会長のこんなジョークともボヤキとも受け取れる言葉で始まった。
0907デフォルトの名無しさん
2015/11/08(日) 02:24:29.04ID:hMKFsgJi> 実際に彼がそう発言したというソースは一度も示されたことがない。
> どころか、1980年代からの彼の発言 (例えば以下のスピーチ) は一貫して「もっとメモリを」と言い続けてる。
> http://csclub.uwaterloo.ca/media/1989%20Bill%20Gates%20Talk%20on%20Mic... [uwaterloo.ca]
>
> まあ、一度も彼の発言なんか聴いたことないんだろうけどね。
0908デフォルトの名無しさん
2015/11/08(日) 02:27:20.34ID:ddjlcS4O興味深い。覚えときますthx
関係ないけどLonghorn当時のの記事内容も感慨深いなぁ
0909デフォルトの名無しさん
2015/11/08(日) 07:33:41.97ID:QfP+cajQなんだよ世代って
0910デフォルトの名無しさん
2015/11/08(日) 07:44:18.27ID:hMKFsgJiお前はなにか勘違いしてるぞ。
たしかに一部のプログラム言語開発者にとっては複雑になったよ。
でも、その他大勢のプログラム言語利用者にとっては
凄くシンプルになった。
世代とか考える必要があるのは一部の人間だけだ。
0911デフォルトの名無しさん
2015/11/08(日) 07:52:51.14ID:QfP+cajQ考える必要があるのか考えないといけない。
ということを入門者にも教えないといけない。
0912デフォルトの名無しさん
2015/11/08(日) 07:56:36.28ID:hMKFsgJiでもさ、mallocの実装のことを
お前何も考えてないだろ?
都合がいい解釈すんなよ。最初から悪く言おうしてるから
考えなきゃいけないと言ってるんだよお前は。
なんでも考えなきゃいけないと思ってるなら
mallocの実装も考えろや。
0913デフォルトの名無しさん
2015/11/08(日) 09:33:56.19ID:QfP+cajQmallocで確保したらfreeしろ。
シンプルだろ。
0914デフォルトの名無しさん
2015/11/08(日) 12:02:23.40ID:3P/yTrZ9GCのせいじゃない
GCに頼りきった設計やライブラリのせいだ
0915デフォルトの名無しさん
2015/11/08(日) 12:54:20.40ID:bAE0co8cたまに循環参照が解放できない糞GCがあったりするけど
0916デフォルトの名無しさん
2015/11/08(日) 13:45:11.50ID:FmnDkrXhただそれだけのことであろう
0917デフォルトの名無しさん
2015/11/08(日) 14:30:26.34ID:QYMRsb+2与えるようなインターフェイスならどうなのかね。
暗黙的に使うから問題あるわけで意識的な使い方すればそこまで問題にはならんでしょ。
0918デフォルトの名無しさん
2015/11/08(日) 17:41:16.43ID:ROw1VB+l共存させるのは無駄に煩雑な言語になると思う
0919デフォルトの名無しさん
2015/11/08(日) 19:47:48.08ID:hMKFsgJi> mallocで確保したらfreeしろ。
それは使う側の話だろw
GCの場合だったら、
何もする必要はない
で終わりだw
> たまに循環参照が解放できない糞GCがあったりするけど
mallocで循環参照してると悲惨ですよ。
freeしてるところにアクセスしたりする。
0920デフォルトの名無しさん
2015/11/08(日) 19:52:51.52ID:hMKFsgJihttp://radlon.github.io/blog/2014/08/25/krmalloc/
0921デフォルトの名無しさん
2015/11/08(日) 21:42:32.79ID:ROw1VB+l0922デフォルトの名無しさん
2015/11/08(日) 21:45:17.45ID:QYMRsb+2確かに。。ちょっと自分で書いてあほだなと思った。
0923デフォルトの名無しさん
2015/11/08(日) 22:03:29.93ID:ROw1VB+lC++CLIという先駆者がいるから安心していいぞ
0924デフォルトの名無しさん
2015/11/08(日) 22:36:50.70ID:HlEs+VqN「無駄に煩雑」なのは否定しないが。
0925uy ◆Qawu9.2l1E
2015/11/09(月) 12:40:10.71ID:VP0GkkkJスクリプト言語からC++で書かれたライブラリを使用して開発、それで速度が十分過ぎる
0926デフォルトの名無しさん
2015/11/09(月) 15:20:43.01ID:xsh7xTs10927デフォルトの名無しさん
2015/11/09(月) 15:39:32.58ID:xsh7xTs1http://www.amazon.com/dp/1556343744
http://ecx.images-amazon.com/images/I/91%2BnrxMSj9L._SL1500_.jpg
http://ecx.images-amazon.com/images/I/81ztOxENYcS._SL1500_.jpg
http://ecx.images-amazon.com/images/I/91M0809E%2B2L._SL1500_.jpg
http://ecx.images-amazon.com/images/I/919cSwq%2BZGL._SL1500_.jpg
http://ecx.images-amazon.com/images/I/61-slOQ1QEL.jpg
0928デフォルトの名無しさん
2015/11/09(月) 16:24:21.08ID:xsh7xTs1http://aurorawave.atspace.tv/?sop:v/EfVSvrKkoWM&RDEfVSvrKkoWM http://i1.ytimg.com/vi/EfVSvrKkoWM/mqdefault.jpg #AuroraWaveTV
0929デフォルトの名無しさん
2015/11/09(月) 17:49:03.09ID:jDVf3Lh4次にお前は
オブジェクト ngc が オブジェクト gc への参照を持てない! クソすぎる!
と言い出す
0930デフォルトの名無しさん
2015/11/09(月) 22:00:03.15ID:xsh7xTs1http://aurorawave.atspace.tv/?sop:v/HIri1484iQ0&RDiEGniXc7Xtc http://i1.ytimg.com/vi/HIri1484iQ0/mqdefault.jpg #AuroraWaveTV
0931デフォルトの名無しさん
2015/11/11(水) 21:12:56.53ID:0UF1mzoB何もする必要がないのに、なぜメモリリークの文献が新しく生まれてるの?と>>1が言ってる
0932デフォルトの名無しさん
2015/11/11(水) 21:32:16.69ID:FCPmsKYk昔はどこからも参照されていないのにメモリが
使われてる状態をメモリリークって言ってたんだけど、
今は、意図せずどこからか参照されてしまっている
メモリまでメモリリークと言い出したから。
0933デフォルトの名無しさん
2015/11/11(水) 21:57:55.18ID:yiYjUqQw循環参照してりゃ、不用になってもメモリーリークじゃないと言う主張か
斬新だな
0934デフォルトの名無しさん
2015/11/12(木) 16:38:49.33ID:+fz8NmqLそれ以外のリソースは自分でcloseなり
オブジェクトの生存期間を考えて色々しなければならない
殆どのオブジェクトはメモリだけのリソースということは少なく
色々なものをコンポジションしまくってるから
クラスを使うときも自作するときも開放処理に気を遣わなければならない
C++のデストラクタ方式は良くできている
0935デフォルトの名無しさん
2015/11/12(木) 16:44:45.32ID:+fz8NmqL最近のコンピュータはメモリを沢山積んでいるし
オブジェクトが要らなくなってからGCが発動して開放されるまで
多少のタイムラグがあっても問題ない
しかし、メモリ以外のリソースについては
必ずしもそうではないので、そういう場合は
C++のデストラクタ方式の方が便利だったりする
GCがいつ発動するかわからないという不安要素は
処理の実行順番が何より重要な手続き型言語と
相性が悪い
0936デフォルトの名無しさん
2015/11/12(木) 19:00:06.71ID:ZBkPHyAT0937デフォルトの名無しさん
2015/11/12(木) 19:57:40.83ID:cV52juFM0938デフォルトの名無しさん
2015/11/12(木) 21:07:14.95ID:WDhKVAtbごちゃごちゃした言語だと思ってたけど、C++11見てたら気にならなくなったw
0939デフォルトの名無しさん
2015/11/12(木) 22:02:53.38ID:GaR/agwA0940デフォルトの名無しさん
2015/11/12(木) 22:48:04.06ID:WDhKVAtb0941デフォルトの名無しさん
2015/11/12(木) 22:59:09.59ID:+fz8NmqLGCはメモリ管理が主だから、メモリ使用量は常に監視していて
足りなくなったらGCが発動したりと完全に管理してくれているわけだが
現実にはメモリより先にメモリ以外のリソースが足りなくなるケースの方が
ありえるわけで、メモリ以外のリソース使用量も監視してくれなくては
本当に安心しては使えないといえる
0942デフォルトの名無しさん
2015/11/12(木) 23:00:02.31ID:+fz8NmqLメモリ使用量だけを監視するというのは完璧じゃない
0943デフォルトの名無しさん
2015/11/12(木) 23:47:00.19ID:UQPi/g2N0944デフォルトの名無しさん
2015/11/12(木) 23:58:58.37ID:FwVQMCtVpythonなんかインスタンス数で判定してるし
0945デフォルトの名無しさん
2015/11/13(金) 09:57:22.27ID:qBXsv8h8プログラムは意図したとおりには動かない。書いたとおりに動く。の法則は昔からかわってないはずだが?
0946デフォルトの名無しさん
2015/11/13(金) 11:54:45.16ID:zBmTWyFy32bitCPUが一般化して メモリ64MBのオモチャPCが売られてた頃
64kBの専用領域を使い切ると「メモリが足りません」とぬかす
オモチャOSが主流だった頃
0947デフォルトの名無しさん
2015/11/13(金) 14:06:20.59ID:b0J0ZgfW0948デフォルトの名無しさん
2015/11/13(金) 20:51:38.53ID:sHuRt5Cqメモリやらファイルやら使ったら解放や後片付けまできちっとやる教育をしないから
結局、参照が途切れてない。意図したタイミングで参照を維持できていないなどのバカなことをしてしまう
プログラマを育成してしまう。
そんな状態を作るくらいならGCはやめちまえ。ってことを言いたいんじゃないの?
0949デフォルトの名無しさん
2015/11/13(金) 21:09:40.11ID:+1eGYaPqどうしてそういう妄想ができるの?
0950デフォルトの名無しさん
2015/11/13(金) 22:13:58.50ID:sHuRt5Cq0951デフォルトの名無しさん
2015/11/13(金) 22:30:12.90ID:+1eGYaPq0952デフォルトの名無しさん
2015/11/13(金) 23:13:07.98ID:BL0hnrCW0953デフォルトの名無しさん
2015/11/14(土) 02:54:21.32ID:LqujN7Od0954デフォルトの名無しさん
2015/11/14(土) 03:19:17.98ID:7BriiQEY例えば、foo(new Bar()) みたいなコード
いちいち変数に入れて、それからdeleteしないといかんの?
0955uy ◆Qawu9.2l1E
2015/11/14(土) 04:22:27.97ID:shhU0jvcスマートポインタ程度も作れないならさっさと死ぬべき
0956uy ◆Qawu9.2l1E
2015/11/14(土) 04:29:02.95ID:shhU0jvcfor文の構造的にマクロでラップすれば
OBJECT_A_GC_( 初期化 ) {
実装
}
これなんか余裕だけど
社畜PGはマクロ禁止されてる(爆笑)から無縁な構文
みんな死ぬべき
0957デフォルトの名無しさん
2015/11/14(土) 04:54:09.79ID:ed8zuO1lBar bar; foo(&bar);
foo(&*unique_ptr<Bar>(new Bar()));
0958デフォルトの名無しさん
2015/11/14(土) 05:01:10.32ID:7BriiQEYひどいな。
コードの量も明らかに増えてるし
可読性も悪くなってる。
0959デフォルトの名無しさん
2015/11/14(土) 05:03:24.70ID:LqujN7Odサイズちっちゃいならfoo(Bar())でいいよ
コード量減ったな。良かった良かった
0960デフォルトの名無しさん
2015/11/14(土) 05:13:59.02ID:7BriiQEY良かったと思ってるよ。これもGCがあるおかげだね。
ソフトウェアの進化っていうのは、
多少遅くなることを許容して開発効率を上げる事で
大きなものを作れるようになってきたわけだからね。
GCは正常進化の流れの一つだってこと。
0961デフォルトの名無しさん
2015/11/14(土) 05:19:40.19ID:LqujN7Odなにいってんの?
>>959はC++の例なんだけど
0962デフォルトの名無しさん
2015/11/14(土) 05:23:21.21ID:7BriiQEYあ、だからnewが無いんですねw
ぐっちゃぐちゃな冗長なコードを
関数の中に押し込んでるわけですかー。
0963デフォルトの名無しさん
2015/11/14(土) 05:26:04.46ID:LqujN7Od想像を絶する馬鹿だな
スタックに置いてるだけだぞ
0964デフォルトの名無しさん
2015/11/14(土) 05:31:00.07ID:7BriiQEYBar()のどこがスタック何ですか?w
関数呼び出しでしょうが。
それにnewじゃないから、要求を満たしていません。
再掲しておきますね。 >>954
> 例えば、foo(new Bar()) みたいなコード
0965デフォルトの名無しさん
2015/11/14(土) 05:36:14.57ID:LqujN7Odそう解釈したのかワロタ
ごめんBarは関数じゃなくてクラスなんだ
C++はヒープに置くかスタックに置くか選択できるんだよ
0966デフォルトの名無しさん
2015/11/14(土) 05:45:48.73ID:7BriiQEY選択する部分まで含めないとダメです。
冗長な部分までしっかりと書きましょうw
0967デフォルトの名無しさん
2015/11/14(土) 05:49:59.60ID:LqujN7Odなんでそこまで自信満々で恥の上塗りをするんだ…
new Bar()ならヒープに、Bar()ならスタックになるんだよ
0968デフォルトの名無しさん
2015/11/14(土) 06:21:33.07ID:LqujN7Od興味本意で聞くんだけど使える言語なに?Java?
0969デフォルトの名無しさん
2015/11/14(土) 08:14:52.13ID:ed8zuO1lもすこし短く書けたわ。ただしC++14。
0970デフォルトの名無しさん
2015/11/14(土) 15:39:26.13ID:Wquzevs4これのお返事ですか?7位
0971デフォルトの名無しさん
2015/11/14(土) 15:51:04.80ID:Wquzevs40972デフォルトの名無しさん
2015/11/14(土) 17:19:32.33ID:cDeM3hPEそういうプログラミングしてるやつほど、参照が切れてなかったり、切れてたりひどい
0973デフォルトの名無しさん
2015/11/14(土) 17:29:07.32ID:5MMaz5Qoメインメモリはまだ空いてるけどビデオメモリは足りないってシチュありえるんじゃないの?
ビデオメモリが足りなくなったことをGCが検出してGC発動してくれるの?
0974デフォルトの名無しさん
2015/11/14(土) 18:11:10.79ID:lGLm+XNPおまえ、ビデオメモリをmallocで確保するとか
newで確保するとか思ってるのか・・・?
0975デフォルトの名無しさん
2015/11/14(土) 21:29:33.53ID:5MMaz5QoCreateTexture的な何かとか
CreateSwapChain的な何かだろうけど
それをラップしたオブジェクトはnewで作るし
そのラッパーオブジェクトの開放をGCに任せたら
>>973にならない?
0976デフォルトの名無しさん
2015/11/14(土) 22:02:19.63ID:Wquzevs4PC側のメモリ管理の問題では
0977デフォルトの名無しさん
2015/11/14(土) 22:22:12.67ID:T7cDyZTEで、ラッパー自体は初期化が終わったらリソース確保し続ける必要ないよね。GPUに渡ってるんならあとはAPI叩くだけなんだし
なので心配不要だと思う
0978デフォルトの名無しさん
2015/11/14(土) 22:30:58.55ID:LqujN7Odただテクスチャハンドルの解放とかをファイナライザに書くと
GC発動までビデオメモリを圧迫してパフォーマンスは劣化するよ
ちなみにGPGPUを行うときはmallocもfreeもしないといけないのが多くて
メモリ足りないこともあるしリークもする。当然GCはなにもしないよ
0979デフォルトの名無しさん
2015/11/14(土) 22:33:52.53ID:5MMaz5Qoまずはステージ1のテクスチャなどを破棄するわけだけど
これをGC任せにするといつ破棄されるか分らないよね
GCが発動しなくてステージ1のテクスチャなどがビデオメモリに残っている状態で
ステージ2のロードを開始してビデオメモリが足りなくなった場合はどうするの?
GCがビデオメモリが足りなくなった事を検出してGCを発動してくれれば良いけど・・・
これは極端な例だけど
0980デフォルトの名無しさん
2015/11/14(土) 22:39:12.89ID:5MMaz5Qoあの一連のコード
IDisposableなオブジェクトをコンポジションすると
必ず書かなければならないし、漏れがあってはならない
大変慎重に実装しなければならない、ような気がする
一方でC++だとメンバ変数のデストラクタは勝手に呼ばれるし
ポインタの場合もスマートポインタを使えば勝手に開放される
結局どっちが楽か分らないのでは?
0981デフォルトの名無しさん
2015/11/14(土) 22:42:06.47ID:LVzdgTaYメモリー管理もそうそうお気楽なもんじゃないんだよ。
0982デフォルトの名無しさん
2015/11/14(土) 22:43:59.47ID:LqujN7OdGCはメインメモリしか考慮しないからなにもしないよ
俺はゲームエンジンのグラフィクス開発やってるから信用してくれていい
更に言うとコンシューマとかだと専用のmalloc, freeがあって
自分で全部管理しないといけなかったりする
0983デフォルトの名無しさん
2015/11/14(土) 22:56:13.54ID:5MMaz5QoそのオブジェクトをコンポジションしたクラスもまたIDisposableが必要・・・
IDisposableはどんどん伝染していくわけでしょ
IDisposableがどんどん増えていく
そんであの一連のDisposeイディオムを書いて
自身がコンポジションしたIDisposableなオブジェクトを調べ上げて
Disposeをコールするコードを手動で書かなければならない
漏れがあってはならない
これってもう手動でmalloc、freeしているのと変わらなくない?
C++ならこんな事は起こらないよね
何か内部でmalloc、free的なことをしているクラスがあったとしても
それはそのクラスだけで閉じている話で、必ずデストラクタで開放されるように作ってあるし、
クラスのメンバのデストラクタは勝手に呼ばれるから、Disposeみたいに伝染しないしコードも必要ない
newする場合でもスマポ使っとけば勝手に開放される
だからオブジェクトをコンポジションしても、な〜んにも気にする必要ない
0984デフォルトの名無しさん
2015/11/14(土) 22:59:19.56ID:ruIj37Ej0985デフォルトの名無しさん
2015/11/14(土) 23:16:38.67ID:5MMaz5Qoそれすらweak_ptrが用意されているから上手く活用すればよい話
メモリが断片化するとか言うけど、MMUが付いているから問題なし
物理じゃなくて論理アドレス空間の方が断片化するのは嫌だが
64bitプロセスであればどんなに無茶をしたからといって使い切ることは現状ありえない
C#はGCを導入した事で
DisposeとかDispose(bool)とかデストラクタとかFinalizeとかusingとかマジ不毛なことになっている
C++はデストラクタ一本だから集中できるし、しかもクラスのメンバのデストラクタは勝手に呼ばれるから
C#のIDispose見たいに伝染しないし、Disposeにまつわる一連のイディオムも必要ない
いつデストラクタの処理が走るかも明確で、いつも同じタイミングだからデバッグもしやすい
GCなんか本当に必要か?
いつ実行されるか分らないからDisposeとかが必要になるし、メインメモリに関してしか上手く機能しないから
それ以外のリソースのことも考えたら結局デストラクタがほしくなる
0986デフォルトの名無しさん
2015/11/14(土) 23:16:48.58ID:7qU/f9+60987デフォルトの名無しさん
2015/11/14(土) 23:26:02.05ID:T7cDyZTEこれはC#がアンマネージドという機構を用意した故の泥臭さだよね
ネイティヴが絡むことをなんとかできるようにしてくれた、と考えたほうが建設的かも
できないよりは有難いことだし、ネイティヴそのままよりややこしくなるのも当然といえば当然のこと。仕方ないのでは。
0988デフォルトの名無しさん
2015/11/14(土) 23:42:17.72ID:0kN6s8T8こんな感じ
using( var context = new DbContext() ){
クエリ実行処理(context);
}
0989デフォルトの名無しさん
2015/11/14(土) 23:45:01.14ID:5MMaz5QoデストラクタとFinalizeとDisposeとDispose(bool)を適切に理解し
マネッジドリソースとアンマネッジドリソースを適切に区別し
例のDisposeのイディオムを書かなければならない
C++はもっと簡単で、自分の使ったりソースはデストラクタで開放しましょう、これだけ
しかも殆どのリソースは勝手にデストラクタが呼ばれるので、殆ど何も書く必要はない
スマートポインタも有るので本当に自動
しかも、このシンプルさで何も破綻していない、実用上問題ない
GCを入れるとC#のDisposeイディオムみたいに、とたんに複雑になる
複雑になるとミスも増えるし、IDisposableの実装って結局手動じゃねーかって言うね
0990デフォルトの名無しさん
2015/11/14(土) 23:53:31.80ID:5MMaz5QoせめてDisposeがC++のデストラクタみたいに
芋づる式に勝手に呼ばれるような、なにかそういう仕組みが用意されていれば
もう少しマシだったと思うんだが、どうよ
0991デフォルトの名無しさん
2015/11/15(日) 00:01:58.94ID:5wcT3tcLDBとかファイルとかネットワークとか
usingの範囲=外部リソースが有効ってことで分かり易いと思うが
0992デフォルトの名無しさん
2015/11/15(日) 00:12:18.39ID:SwaoEtt5自クラスにもDisposeが必要でしょ
てことは例のイディオムを書いて、コンポジションしたメンバのDisposeを
手動で呼ばなければならない
これってどうよ
0993デフォルトの名無しさん
2015/11/15(日) 00:18:09.95ID:SwaoEtt5持っていた場合は自身もIDisposableにする必要が有るし
その上手動でそのオブジェクトのDisposeを呼ばなければならない
調べ忘れてもアウト、呼び忘れるとアウト
これはもはや手動でメモリ管理しているのとかわらないではないか
C++のデストラクタ方式の方がよほどシンプルでは?
デストラクタは芋づる式に呼ばれるからコードを書く必要はないし
呼び忘れるという事もない
もちろんスマートポインタも有る
0994デフォルトの名無しさん
2015/11/15(日) 00:22:55.00ID:5wcT3tcL外部リソースの管理は呼び出し元で行えばいい
0995デフォルトの名無しさん
2015/11/15(日) 01:22:55.68ID:6d3FFbb6delete or スコープから外れた時点でデストラクタ呼ばれないと不便で仕方がない。
0996uy ◆Qawu9.2l1E
2015/11/15(日) 06:04:01.24ID:BtG1eDoL0997デフォルトの名無しさん
2015/11/15(日) 08:24:18.89ID:JV6qYeNyこんな論争が起きる仕様を素人さんやプログラミングに興味無い大半のプログラマが学び取れるわけがないということを。
シンプルにメモリー使ったら自分で後片付けまでする。
それを標準にしておけば、結果としてみんな幸せになる。
0998デフォルトの名無しさん
2015/11/15(日) 10:55:43.22ID:q/hba8+kPrestoもう更新されない? 機能はVivaldi に盛り込まれて行くだろう!
VivaldiにPrestoなサムネイルやタブスタッキングなど搭載が暗示させている
0999デフォルトの名無しさん
2015/11/15(日) 11:06:09.06ID:mMtidkZ5まともに動かすことをやったほうが
1000デフォルトの名無しさん
2015/11/15(日) 21:14:50.90ID:JV6qYeNyInsert やら Appendやらでデータ突っ込んだら、DisposeやらClearやらDeleteやらで全部消せ
new して使い終わったら、 nullしろ
ロジックとして無駄だとしても後から読むプログラマにとっては有益だ。あぁ。ここでデータを捨ててるんだな。とわかる。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。