X



mallocの後にfree不要と言うバカいるの?Part2
■ このスレッドは過去ログ倉庫に格納されています
0518デフォルトの名無しさん
垢版 |
2014/10/17(金) 21:53:10.77ID:xzFrNjz5
>>516
言いたいことは分かるがWin32APIって案外そういうの多いからなぁ…
user32とかkernel32にも標準CライブラリみたいなAPI(sprintfモドキも居るしw)が結構一杯ある。
MulDivやCopyMemoryみたいなのも居るし、CopyRectに至ってはただの32バイトコピー。
HeapAlloc程度でモニョってたらこいつらはモニョるなんてレベルじゃすまんぞw
MulDiv(32ビット値3つから中間値64ビットの掛け算と割り算)が何故カーネル扱いなのかと。
0520デフォルトの名無しさん
垢版 |
2014/10/18(土) 13:08:53.33ID:36yYJ0yX
>>510
昔はそんなにメモリが潤沢になかったから、アプリが終了する前でも
不要になったら開放する方が、いろいろとよかった時代もあったんだよ

>>all
もうお前ら不毛だからこの辺にしとけ
0521デフォルトの名無しさん
垢版 |
2014/10/18(土) 13:50:57.61ID:/oNwCDSd
>>520
そうもいかない、そんな結論では C++ がいまだに営々と複雑化にこだわっている立つ瀬がない‥
0522デフォルトの名無しさん
垢版 |
2014/10/18(土) 16:59:54.98ID:36yYJ0yX
メモリは動的に確保するくせに開放は静的にOSに任せたい
だったら、必要になるであろうメモリも配列で静的に確保しとけばいいんじゃね?
とか思うんだが…

でこういうこと言うと荒れるから、結論は
freeしたい人はして、したくない人はしない
で終了でいいんじゃね?っていう
0523デフォルトの名無しさん
垢版 |
2014/10/18(土) 17:06:19.18ID:/oNwCDSd
>>522
それは古来lispでもよくみられたプール式、cons セルという定サイズ領域を多量に使う用途で採用されているのをみたことがある
0524デフォルトの名無しさん
垢版 |
2014/10/19(日) 18:09:53.15ID:9/KRJRbT
解放しないプロセスってデバッガで実行すると終了時に大量のleak検出を吐き出したりしないのか?
0526デフォルトの名無しさん
垢版 |
2014/10/20(月) 12:45:42.29ID:4QGk34Ml
たぶんメモリリークしてもプロセス終了時に
全部解放されるんだから大丈夫だと思ってるんじゃない?
0529デフォルトの名無しさん
垢版 |
2014/10/20(月) 19:48:59.73ID:+DF5oC/s
メモリリーク検出ツールでリークと解放の
区別がつかなくなるから解放しとけって話でしょw
0530デフォルトの名無しさん
垢版 |
2014/10/20(月) 23:06:26.87ID:exxFMbgq
プログラム中で確保したメモリの各々がfreeする必要あるかないか、間違えずに
判断できる達人ならリークチェッカ使う必要ないな。
0534デフォルトの名無しさん
垢版 |
2014/10/21(火) 13:25:02.74ID:LAOYaiit
リークチェッカなんて必要ない。
作った奴は馬鹿だ。
ミスをしなければいいだけの話。
0536デフォルトの名無しさん
垢版 |
2014/10/21(火) 17:55:34.62ID:RumsGmel
デバッグモードでコンパイルしたときだけ解放したら
良いだけじゃん馬鹿すぎ
0537デフォルトの名無しさん
垢版 |
2014/10/21(火) 18:51:18.50ID:LAOYaiit
>>535
その修正をサポートするルールがリークチェッカでしょ?

で、free不要なんていって、free書いてないから
たくさん出るエラーの中から本当にリークしているものを
探して出すというマヌケな作業を行うwww

結論出たじゃん? freeは必要。
0539デフォルトの名無しさん
垢版 |
2014/10/21(火) 20:16:00.88ID:7WAeJlTS
なんでfree関数というものがあるのかを考えればわかるよな
もう終わりだろ…
0540デフォルトの名無しさん
垢版 |
2014/10/21(火) 21:03:35.69ID:c8NUu7RB
意図的にfree省略してる場合は>>536で済むってのは置いといても、
>>534ではリークチェッカ自体が不要と言っているのに、
>>537ではリークチェッカの為にfreeが必要って変な結論だなぁ…
0541デフォルトの名無しさん
垢版 |
2014/10/21(火) 21:34:25.75ID:FB8PDZ29
リークチェッカのエラーをなくすことが答えだと思ってる人もいますね
微妙な...
0542デフォルトの名無しさん
垢版 |
2014/10/21(火) 22:04:40.05ID:RG7X7O+y
リークチェッカーでリークを葬ったら、おもむろに選別していけば言いだけの話
というか、リソースリークの方が深刻でちょっと困っている
0543デフォルトの名無しさん
垢版 |
2014/10/22(水) 21:25:19.20ID:9Jwqj8Ni
おもむろに選別する効果・・・0.001秒速くなる。
デメリット、選別作業に数時間。
ドラブルあって、戻すのに数時間
0546デフォルトの名無しさん
垢版 |
2014/12/03(水) 21:28:00.02ID:j0dAKNGZ
C++だと、動的確保って

int *a = new int;

/*
aを使った処理
*/

delete a;

みたく書くと思うけど、deleteしないとアプリケーションを終了させても
確保されっぱなしだよね?
free()不要とか言ってるやつは、上記でいうdelete不要って言ってるのと
同じだよね?
0547デフォルトの名無しさん
垢版 |
2014/12/03(水) 21:41:48.53ID:JFY2u8h+
newは互換性のためにmallocで実装されてると聞いたことがある。ほんとか知らんけど。
0548デフォルトの名無しさん
垢版 |
2014/12/03(水) 22:01:51.69ID:U2a4HdIu
>>546
>deleteしないとアプリケーションを終了させても確保されっぱなしだよね?
いや、それはない。アプリ終了時にアプリの使用していたメモリは OS が解放する。これは基本的な共通認識。
それをみこして free()/delete を@まったくしないでもいい、A選別して使用しないのもありだ、B信者ならどんな new/malloc() も必ず delete/free() すべきだ、真っ向に対立している。
0550デフォルトの名無しさん
垢版 |
2014/12/04(木) 02:18:35.19ID:wOy+480c
C++なら、メモリマネージメントクラス書くでしょ。その前にstd::vectorあるけど。
0551デフォルトの名無しさん
垢版 |
2014/12/04(木) 04:20:29.25ID:ViSTblTx
Jane使ってる人は分かると思うけど、一度に多量の画像を保存する機会が多いと思う
そしてJaneは一度立ち上げたらOS再起動するまで大抵立ち上げっぱなし

そんな状態で画像の展開領域のためにmalloc()もしくはnewしたメモリをfree()やdelete
しなかったらどうなる?これ32bitアプリでしょ?120〜150枚ほど画像を開くと、例えば俺の
環境の場合Windows8.1だからJaneには2GB割り当あられるけど、free()しないとすぐに
メモリがなくなっちゃうね
0552デフォルトの名無しさん
垢版 |
2014/12/04(木) 07:46:58.88ID:44/e6+B9
delete/free()不要って言ってる人って、もはやなぜメモリを動的に確保するのか?
の意味を見失ってる人ですよね?
可哀想です
0553デフォルトの名無しさん
垢版 |
2014/12/04(木) 08:53:33.85ID:i8WWsgkD
>>548
最初は1を主張する馬鹿を論破するだけで、2と3の区別なんて無かったんだけどなぁ…
2に対する3を定義しなおして信者信者言うのは論破された1が苦し紛れに言い出したかのような話題でなんていうかアレ。

そもそも2は全てdelete/freeも出来ない奴のスキルでは不可能だし、
メンテナンス性などの面から見ても必要があれば全て開放できる設計でないとダメ。
そもそも選択して開放しない方が良いなんて言うケースの方が例外的なのに、そんなの持ちだしてまで騒ぐなよ、と。

>>552
だよね。本来はその一言で終わる話題なのに・・・
0554デフォルトの名無しさん
垢版 |
2014/12/04(木) 09:15:31.23ID:otxDKoZc
ガベージコレクションはいらない、と必死でやせ我慢してC++を使う俺カッコイイ、というわけですねわかります
本来はこの一言で終わる話なのに、可哀想です
0557デフォルトの名無しさん
垢版 |
2014/12/04(木) 20:36:19.32ID:e632zg1P
>>554
GC はまだ「完成された」というほどの領域に至っていない、Mark&Sweep とか CopyGC, 世代別GC、incrementalGCなど、いろんな手法を駆使してだましだまし実装しているレベル
うそだと思うのなら、スマフォアプリを見ればよい、スマフォは定期的に再起動しないといけないレベル、iphone は定期的にiOSアップデートの方が先にやってくるようだが
0559デフォルトの名無しさん
垢版 |
2014/12/04(木) 20:50:13.03ID:otxDKoZc
研究が盛んなあらゆる分野に「まだ「完成された」というほどの領域に至っていない」って
喧嘩売ってみろよw
0561デフォルトの名無しさん
垢版 |
2014/12/04(木) 21:25:34.66ID:otxDKoZc
いろんな手法を駆使してだましだまし漏れがないようにしているレベル、って言うんじゃないのか、それw
0563デフォルトの名無しさん
垢版 |
2014/12/04(木) 23:15:24.98ID:Q4EOsLJ8
malloc/freeでバグばっかり出してる奴が「freeしない」という解決策を正当化しようとしているだけの話。
0564デフォルトの名無しさん
垢版 |
2014/12/05(金) 00:48:52.11ID:3wjXi0Au
この感じだとバグ出す以前の問題で、deleteの使い方知らずに恥かいたJava厨なんじゃね?
0565デフォルトの名無しさん
垢版 |
2014/12/05(金) 01:39:25.94ID:eQEw8fvn
なぜメモリを動的に確保する必要があるのか?という基本に立ち返って考えれば
不要論は論外であることに気づくだろう
注:このスレタイからわかるように近年のGCは範疇に入っていない
0567デフォルトの名無しさん
垢版 |
2014/12/05(金) 08:19:12.35ID:2qqkLjHh
>>561
ラッパ一つを「いろんな」「駆使して」とかいうお子様レベルなの?
あと GC はまだまだだよ、Java の業務アプリを60日間起動しているとメモリ占有量が増えてきてきびきび動かなくなるとか勘弁してほしい、スマフォもイマイチだなあ
0568デフォルトの名無しさん
垢版 |
2014/12/05(金) 11:53:33.63ID:IjAdRY0C
ほら出た、「俺様のやってる業務には」というすごく狭い世界が、世界の全てだ、みたいな人w
0573デフォルトの名無しさん
垢版 |
2014/12/06(土) 03:30:36.01ID:Iv1q4dyj
>>572
VirtualAllocとかOS依存のメソッド使ったり、グローバルな配列を細切れに使ったりも出来るんじゃない?
標準のAPIで書くならmallocしかないけど…
コンパイラ環境側が提供するnewを標準Cの範囲のみで書かなきゃダメな規則とか有るんだろうか?
だけどstd::threadとか標準Cにはどうやっても落とし込めないよなぁ…
0574デフォルトの名無しさん
垢版 |
2014/12/06(土) 09:58:48.26ID:Khx/zTiJ
いやいや、freeが邪魔になるのは数少ない例外って
世界でものすごく広く使われているプログラムcpがfreeが邪魔だから
最後のfreeしなくなったでしょ

Google word2vecだって最後のfreeは省略している。

上で書いてあるJaneの例はfreeすべき例、
オブジェクトの寿命が終わったのだから。


free絶対主義者の考え方の何が、気に食わないかって
オブジェクトの寿命を意識してプログラムを組んでいないんじゃ
ないかってこと。

リークチェッカに引っかからなければプログラムの実行中
不必要なオブジェクトの領域が確保されていても気にしなさそう。
0575デフォルトの名無しさん
垢版 |
2014/12/06(土) 11:47:15.03ID:dmb0kXdE
なぜメモリを静的にではなく動的に確保するのか?の本来の目的を考えれば
自ずと答えは出る
0576デフォルトの名無しさん
垢版 |
2014/12/06(土) 12:31:58.16ID:ui+tbMEF
オブジェクトの寿命を意識するってのは、プログラム開始してから終了するまでの
どの期間存在するかを常に意識しろということなのかね。
プログラムの構造化によって生存区間を限定し、不要になった時点で破棄することで
大域的な知識によらずに安全に使用リソースの最小化を図るという考え方が理解できない
原始時代の人なんだろうか。
そういう人は少なくとも関数内でmalloc/freeを使うべきじゃないな。
0577デフォルトの名無しさん
垢版 |
2014/12/06(土) 12:50:41.02ID:JydoFUaV
大域的な知識を基に最適化するのはむしろ今のトレンドだけど

オブジェクトの生存期間を意識し、場合によってはfreeしないことで
プログラムの性能を向上させる話でしょ?
cpやword2vecの例は
0578デフォルトの名無しさん
垢版 |
2014/12/06(土) 14:49:24.53ID:ui+tbMEF
自動化ないしは意識せずにできるようにするのはな。
プログラマ自身がしこしこやるのがいったいどこのトレンドだよw
0580デフォルトの名無しさん
垢版 |
2014/12/06(土) 18:25:26.31ID:dOSwxHPK
cpやword2vecを書くようなプログラマと
その辺で業務システム書いてるドカタを
同じ土俵で論じるのが間違い
0581574
垢版 |
2014/12/06(土) 19:13:16.22ID:Khx/zTiJ
>>576

>> 不要になった時点で破棄

まさしくそれ、
不要になったと判明した時点で速やかに破棄というのが大前提。

free絶対派はその意識が乏しいんじゃないかと。
なんとなくmallocとfreeは対でなければいけないから漫然と
freeしているだけなんじゃないかと。

上記のJaneの例なら
画像を破棄したらその画像で使用した領域はその時点でfree
スレッドを破棄したら、それに使った領域はその時点でfree

word2vecは入力した文書の統計情報は最後まで利用する
--> 破棄されることがないので、freeする必要がない
0583デフォルトの名無しさん
垢版 |
2014/12/06(土) 19:46:54.04ID:ADt2fRJM
プロセスが確保したメモリは、プロセスを終了させても解放されず、
解放するにはコンピュータの再起動が必要となるOSが昔あったなあ。
バグではなく、OSの正規の仕様として。OSの名前忘れたけど。

そんな仕様じゃメモリをいくら積んでも足りないし、連続稼動できないじゃん!

・・・という各方面からの否定的な評価に対し、そのOSの設計者は
「メモリを十分に積まないのが問題」「定期的にリブートすればいいこと」
「メモリ資源の再利用をOSに任せようとするアプリケーション開発者の手抜き」
のようにOS側の問題ではないと一蹴してて、その主張に一理あるということで、
当時はちょっと衝撃を受けたわ。

malloc したものを free することには合理性があるけど。
その価値観に対抗するようなOS設計哲学も存在するということで。
何が正しいのか、唯一の結論を出すのは、なかなか難しいかもねえ(^o^)ノ
0584デフォルトの名無しさん
垢版 |
2014/12/06(土) 20:01:10.98ID:5oGFUyw+
UnixのSIGKILLみたいに問答無用でプロセスが殺されたりせずに、後始末の作業が
できることがシステム全体として保証されてるなら通る理屈だけど、どうせそのような
仕掛けがあるわけじゃないだろうなw
0585デフォルトの名無しさん
垢版 |
2014/12/06(土) 22:06:14.90ID:Iv1q4dyj
>>581
だからさぁ・・・それをfree不要とは言わないでしょ。
freeしない領域も実質プログラムの終了でfreeを代用してるだけだし、
プログラマの意図としてはfreeすべき場所を把握できているケース。
このスレはfreeも満足に使えないくせにfree不要とか言っちゃう馬鹿を断罪するスレなんだよ。

なんでそこまでして「free不要論は間違い」をfree必須教みたいに扱って敵視してんの?
発端のfree不要とか言っちゃった馬鹿が知恵つけながら粘ってるようでヤなんだけど。

>>584
そこまで行くとkillするAPIも無いとかkillする側が責任持つべきとかになるんじゃね。
0586デフォルトの名無しさん
垢版 |
2014/12/06(土) 22:10:57.01ID:jRYa77lH
プログラムの最初から最後まで領域を優先するようなメモリはStatic使うべし。
MallocはFreeされるべき。
0588デフォルトの名無しさん
垢版 |
2014/12/06(土) 23:09:29.33ID:jRYa77lH
Malloc自体は遅いんだよ。
Freeしなかったら蓄積してって確保できなくなるぞ。
まぁ、最近のコンピュータで困るかはわからん。
0589デフォルトの名無しさん
垢版 |
2014/12/06(土) 23:29:03.74ID:5oGFUyw+
GCを前提としたmallocだと、極端な奴ではポインタずらして管理情報をちょこっと書くだけ、
って場合もあるけどなw
0591デフォルトの名無しさん
垢版 |
2014/12/07(日) 00:10:44.64ID:T0oVgQBw
mallocしたメモリをGCしてくれるわけねーだろw

そういうやつはC++ならせめてgcnewくらい使え
0592デフォルトの名無しさん
垢版 |
2014/12/07(日) 05:38:55.41ID:LVeISVsO
これが fopen() / fclose()、低水準なら open()/close() の話だったりすると、
プロセス終了時にオープンされているものは OS がクローズしてくれるものにもかかわらず、
「プログラム終了時の fclose() を省略しないやつは糞」というのはあまりきかないね…
ま 10万20万と fopen() するわけではないからね…
0593デフォルトの名無しさん
垢版 |
2014/12/07(日) 09:22:07.16ID:T0oVgQBw
つーか、終了時のメモリ開放処理程度をめんどくさいとか言うやつは
もうプログラマなんか向いてねーからやめちまえよ
0594デフォルトの名無しさん
垢版 |
2014/12/07(日) 09:40:05.22ID:r6DD4JyZ
>>593
プログラマがめんどくさいだけならいいけど、
ユーザーが遅さを体感することになるからな
ユーザビリティの観点からもプロセス終了時の明示的メモリ解放はやめるべきだ
0595デフォルトの名無しさん
垢版 |
2014/12/07(日) 09:50:23.92ID:SIYxuRDn
>>592
「俺はmallocとfreeを使える」って所で学習が止まってしまっていて、そこまで到達したことだけが
心の支え、というオワコンプログラマが多いのさ。
0596デフォルトの名無しさん
垢版 |
2014/12/07(日) 10:04:52.37ID:ekuZw6uY
最近のシステムではないと思うけど、ファイルの場合は排他ロックしたらシェルから見てデッドロックしたりするので解放しないという選択肢はないはず。
0597デフォルトの名無しさん
垢版 |
2014/12/07(日) 10:13:48.44ID:RIZYWRwW
昔はOSの設計上、同時に開けるファイルハンドル数に厳しい制限があった
今はほぼ制限なしに等しくプロセス外にまで支障をきたすほどたくさんファイルを開くシステムも稀
プロセス間で同じファイルを扱うケースも実際には少ない
0598デフォルトの名無しさん
垢版 |
2014/12/07(日) 10:45:17.82ID:mrRmmrII
たしかに MS-DOS でも1プロセス20までだったか、プロセスメモリマップにもそういうテーブルがあったね
0599デフォルトの名無しさん
垢版 |
2014/12/07(日) 10:52:54.31ID:mrRmmrII
>>595
たしかに、きっちり malloc() と free() を対応させる技術がなく、当然必要がなくなった時点でさっさと free() することもできない、したがって free() しなくともよい判断は到底不可能という、頭の可哀相な >>558 もいることだし
0600デフォルトの名無しさん
垢版 |
2014/12/07(日) 11:05:32.98ID:SIYxuRDn
ファイルロックの方法によるのにあっさり決めつけてしまってるあたりが、
全くわかってないことを露呈していて趣き深い。
0602デフォルトの名無しさん
垢版 |
2014/12/08(月) 10:37:40.97ID:SJ/ip5mJ
日本主記憶解放戦線。
0604デフォルトの名無しさん
垢版 |
2014/12/08(月) 18:30:17.91ID:SJ/ip5mJ
我々はすべての主記憶を解放するまで戦い続ける。

解放すると遅い。
それは設計あるいは使用範囲が間違っているのである。

適宜開放することにより、誤りに気付く機会が与えられる。
すなわち、確保した記憶域は必ず解放されねばならない。

(主記憶解放戦線憲章より引用)
0607デフォルトの名無しさん
垢版 |
2014/12/09(火) 08:32:16.30ID:LA65v/8c
>>593
終了時の開放は別に無くても良いと思う。

勿論反復ルーチンでは都度開放しないといずれ枯渇するから開放は当然。
GC無くても如何なる場合も開放不要、みたいな意見には賛成できない。

要はケースバイケース
0608デフォルトの名無しさん
垢版 |
2014/12/09(火) 12:52:12.55ID:i9BKJ0vK
>>607
貴様は己の能力を過信しすぎている。

必ず解放しろ。
いいな、これは命令だ。
0610デフォルトの名無しさん
垢版 |
2014/12/09(火) 23:34:43.57ID:i9BKJ0vK
計算指示書作成手順において、記憶域解放が省略されてはならない。

それは省略ではなく手抜きである。

少々の手抜きが計算指示全体に悪影響を及ぼすことがある。
心して作成せよ。
0611デフォルトの名無しさん
垢版 |
2014/12/10(水) 00:33:13.98ID:Deu5ogie
サッカースタジアムは、
客がはけた後には必ず掃除されるんだから、
サポーターがゴミ拾いをする必要はない。
0612デフォルトの名無しさん
垢版 |
2014/12/10(水) 00:37:51.16ID:8C/H0+A2
しかし同じ日に繰り返し何試合もやったら次第に人のいる場所がなくなるだろ
0614デフォルトの名無しさん
垢版 |
2014/12/13(土) 00:20:32.42ID:pBf+dW7w
組込ソフトウェアでfreeしなかったら、起動してネットワーク接続したら3分と持たずにフリーズするかメモリ枯渇エラーのログ吐きまくるわ
0616デフォルトの名無しさん
垢版 |
2014/12/27(土) 16:11:44.99ID:9Rxt26Ql
free要る派
→自分でしたうんこは自分で流す派

free要らない派
→うんこしたけど、この便所二度と来ることないから俺シラネ
便所の管理人が勝手に掃除してくれるんじゃね?

と考えると、俺は断然free要る派となる
0617デフォルトの名無しさん
垢版 |
2014/12/29(月) 20:47:20.01ID:KuYXSH39
>>616
流すまでその便所は他の人が使えないわけだが、管理人が来ないまま使える空き便所が無尽蔵にあるという前提が必要だな
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況