mallocの後にfree不要と言うバカいるの?Part2

■ このスレッドは過去ログ倉庫に格納されています
2013/01/30(水) 21:38:37.44
fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)

前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/
2013/06/08(土) 10:15:22.94
>>243
英語版から引き継いでるな。
しかも「すなわち」と訳すべき or を「あるいは」と訳してる(爆笑)
2013/06/08(土) 13:13:50.33
>>255
真のザコw
2013/06/10(月) 09:36:45.07
おれはループの中に含まれないmallocはfreeしなくてもいいと思うよ
2013/06/10(月) 21:51:08.78
でも、free() しようと思えばできるけど、いちいち書くのはめんどくさいていう立場でしょう?
2013/06/10(月) 22:10:56.15
freeして害になることは何一つない
freeしなくて良い条件を必死で探して屁理屈を垂れ流すのは、
1円安く物を買うために10km先まで行くようなもの
つまり、視野狭窄馬鹿の自己満足に過ぎない
2013/06/10(月) 22:12:32.75
必死だな
2013/06/10(月) 22:19:01.91
>>261
今どきそんな幼稚園レスして恥ずかしくないのか?
2ch黎明期じゃあるまいし
2013/06/11(火) 00:04:55.16
>>260
散々既出だと思うけど、アプリ終了時の場合は自分でfreeするよりOSに任せたほうが早い場合もあるでしょ。
mallocしたメモリがswapされていた場合とか。
2013/06/11(火) 10:36:17.87
>>260
「複雑なデータ構造のときに、mainからreturnする前に一生懸命freeしてまわるのがコードの無駄だし時間の無駄」

というのはうなずける。
2013/06/11(火) 11:04:20.06
ただfreeするだけならともかく、構造体の中にポインタがあってそれを全部たどってると、
スラッシング起こすアプリとか、実際あるね。
2013/06/11(火) 12:40:03.49
そういうプログラムは通常実行中も論外なのでは。
2013/06/11(火) 12:41:14.78
mainからreturnの前のfreeは、自己満足に過ぎないよね
2013/06/11(火) 14:22:12.07
>>266
実行中は仮想空間を食い潰してしまわないためにはfreeせざるをえないかもしれない。
Oracle JVM みたいにメモリ使用量を指定できるなら、それ使って実メモリのサイズに
抑えておくのが常道。
2013/06/11(火) 21:45:13.42
>>266
まあ、必死に考えた無理矢理の例なので、暖かい目で見てやってください。
2013/06/11(火) 22:09:58.38
具体的に反論できない人を生温かく見守るスレでつねw
2013/06/11(火) 22:12:40.96
なら、具体例出してみなよ (w
2013/06/12(水) 13:34:50.19
不定量だが必ず確保される。
プログラム終了まで必要。

以上の場合はfreeしないかもね。
単なる手抜き以上の理由は無いが。
2013/06/12(水) 13:37:12.12
コンパイラみたいに1回走って終わりのプログラムなら、いらんよ。
最初のほうの手続きで確保して、後のほうでも使う、とかいうデータだと、
malloc/freeの対応が簡単じゃなくなるし。
2014/06/08(日) 19:18:18.10ID:y9fg5iny
プロセスが終了したあとのメモリの開放って何かの規格に入ってんの?
2014/06/08(日) 23:12:22.86ID:bkCTLeYU
>>274
普通のOSならそうする、くらいとしか
MS-DOS ですらプロセスで取得したメモリブロックを回収にまわるから、それをしないOSは, MS-DOS 以下ということで
2014/06/08(日) 23:20:13.12ID:0ybo3LG4
POSIXの場合、メモリはプロセスにひっついてるものだから、プロセスが消えたら消える。

メモリはいいけど、プロセス間通信のための資源とかで、プロセスとは独立に生存する
ものについてはダメだから、注意する必要があるね。
2014/06/09(月) 17:59:41.28ID:zFo/cDF8
>プロセス間通信のための資源とか
参照カウンタ見て上手くやってくれてるんじゃないの?
2014/06/09(月) 22:41:25.12ID:0wp3BeLp
man ipcrm
2014/06/29(日) 22:57:20.87ID:7osONbHL
mainだって普通の関数なんだから、プロセス起動時以外にもコード中で呼び出される可能性はある
つまりmainからreturnした直後にプログラムが終了してOSがメモリ回収するとは限らない
2014/06/30(月) 00:10:01.85ID:DSrnNHZo
重箱の隅つつくと普通ではないな。return省略していいっていう特別扱い
2014/06/30(月) 09:54:32.09ID:lJxnkRTG
(暗黙的なスタートアップから以外の)main()の呼び出しは未定義じゃなかったっけ?
2014/06/30(月) 11:46:32.05ID:9KK/EJtO
C++では明確に禁止。
Cでも、ふつうはやらないほうがいい。

そして、いずれにしろプロセスが終了すればプロセスが持っていた資源はOSが回収するので、
>>279 の言っていることは屁理屈にすらなっていない。
2014/06/30(月) 22:02:19.05ID:Jqyj17b9
なんか意味があるかって言われると何も言えないけど、
確かにCだとmain()を呼ぶことはできるんだね。
ttps://ideone.com/hII5Pp
2014/06/30(月) 22:05:05.58ID:9KK/EJtO
コードゴルフでループを書くよりもmainを再帰で呼ぶほうが短くなる、という技がある
2014/06/30(月) 22:07:48.77ID:Jqyj17b9
>>284
確かにmain()を再帰呼び出しして確認してもよかったね
というか、適当ソースだからどうでもいいけど、我ながらreturnなしのint hoge()って。。
2014/07/07(月) 21:15:24.61ID:KBtb6NQy
要約すると、メモリーが貴重な時代は終わった。終了が早いのが正義。freeいらね。
2014/07/23(水) 06:53:50.72ID:aSrmdrCP
>>282
普通は回収されるとはいえC/C++自体にその保証は無いけどね。>>274-275
>>286
自前でメモリ管理を再発明するなら別だが、確保と開放を繰り返す場合は必要。
2014/07/24(木) 07:55:56.40ID:vS77S6P+
うん。言語では保証されてないね。
OS無しの環境を使ってるならね。
2014/07/24(木) 21:52:53.95ID:rO5lcI/m
hosted environment なら保証されてなかったっけ?
290デフォルトの名無しさん
垢版 |
2014/09/27(土) 01:05:41.54ID:ZCazcpui
例外的にfreeを使わないのが正しい判断でそうしてる場合であっても、freeを記述した
上でコメントアウトしておくとか、条件コンパイルでfreeを有効にも無効にも切り替え
られるようにしとかないと、まともなコードとして信用はできないな。
2014/09/27(土) 01:46:12.43ID:z3mF+ujQ
ちゃんと free() できないくせに「free() を省略している」と主張するとか、面の皮が厚いですね
292デフォルトの名無しさん
垢版 |
2014/09/27(土) 09:52:04.78ID:lv9b6q1l
LinuxはOSが完璧だからFreeの必要がないが、Windowsはバグが多いので
必ずFreeしなければならないと犬板で言ってた。
2014/09/27(土) 10:27:03.26ID:2YkqVza8
>>292
Windows にバグが多いかどうかは別にして、必ず free すればいいと思ってる犬板の奴はアホとしか思えない
2014/09/27(土) 11:23:46.58ID:XmLrUZPb
エプロンおねえさん以上の知能の持ち主がなにかおしゃってますね
2014/09/27(土) 14:31:25.00ID:lJpImKEe
Windowsで注意が必要なのはリソースとかで、
Linuxでも複数プロセスが共有する名前付きの資源とかは注意しなけりゃならんことに
変わりはない。
2014/09/27(土) 14:42:06.10ID:2hDhGVr5
free()すらめんどくさがるやつはプログラミングすんな
以上
2014/09/27(土) 14:54:47.52ID:0IvxL3Y7
不要なOSでまで馬鹿正直にfreeしてたらクソ遅いだけじゃん
意味無いどころか害悪

http://cpplover.blogspot.jp/2014/09/cp4320039tb.html
2014/09/27(土) 16:09:33.54ID:XmLrUZPb
メモリの確保と開放がちぐはぐでバギーなことしたいならご自由に
2014/09/27(土) 17:14:03.74ID:lJpImKEe
ちぐはぐにしないために、許容可能な場合は「freeしない」というポリシーを決めるわけです。
まったく何もわかってないバカということを露呈していただいてありがとう御座います。

一生そのレベルのバカでいてくださいね。使い物にならないプログラマが増えて爆死してけば、
使えるプログラマの給料が上がりますのでw
2014/09/27(土) 17:15:50.18ID:XmLrUZPb
乙女のポリシーかなんかですか?
2014/09/27(土) 17:42:35.54ID:BQj/liI5
ポリシーって書ける俺かっけーって奴でしょ w
2014/09/27(土) 17:48:52.13ID:lJpImKEe
流石バカ
2014/09/27(土) 17:50:51.69ID:DE3jcZJu
freeしないのは自由だし、必要ない場面があるのも確かだけど、イチイチそんな事例を列挙してポリシー()化する程のメリットがない
2014/09/27(土) 17:51:04.65ID:kqLVip0H
freeが省略可能かどうか、事前あるいは局所的に判断できるようなあまり一般的ではない
ケースのためにわざわざ妙なポリシーを設定するのはセンス無いと思う。
あるいは、何か変更する毎に「前にここで省略したfreeがまた必要になってないか」って
気にしながらプログラミングするんだろうか。
2014/09/27(土) 18:33:38.97ID:t2PIgPlE
許容可能な場合は〜
とか、ポリシーでもなんでもないだろ
どういう場合に許容可能とするかを書かないと意味がない
そのレベルの奴なので温かくスルーしてやりなよ w
306デフォルトの名無しさん
垢版 |
2014/09/27(土) 19:02:44.41ID:lv9b6q1l
>>297が言いたいのは、Linuxは糞速いのでプログラム内から解放すると一日たっても終了
しない解放処理が、システムに任せると1nsで終わるということだと思います。
前から思ってたけど、glibcって糞ですよね。
libc5サイコーってLinux板で言ってました。
2014/09/27(土) 20:22:12.59ID:XmLrUZPb
cp使って大量で大容量のバックアップする人いるんだ
へー
308デフォルトの名無しさん
垢版 |
2014/09/27(土) 20:27:29.57ID:lv9b6q1l
>>307
いますよー。
しかも、オプションなんて気にしないのです。
2014/09/27(土) 20:38:54.53ID:lJpImKEe
デーモン類みたいな動かしっぱなしにするプログラムで、どんどんメモリを確保して手放さなかったら
困るけど、コンパイラみたいにどうせすぐ終わるプログラムで、今時なら100Mぐらいに収まるとかなら
どうでもいいだろ。その程度の想像力も判断力も無い奴が「温かくスルー」とか、能天気でいいよなw

あと、直接freeするわけじゃないけど、GCのある言語で終了前にGCが走るような場合、確保しまくった
メモリ空間を全部なめて回るからスラッシングが起きてマシンが劇重になることがある。
そんな場合も、本当に解放すべきリソースがあるのでなければ、とっとと_exitしてしまえばいい。
2014/09/27(土) 20:47:14.49ID:M7lcZRBS
必要かどうかを判断したり適切かどうかをチェックしたりする人的コストがムダ
2014/09/27(土) 21:05:07.76ID:y/Ez5wR8
スマートポインタ作ればいいだけやで
2014/09/27(土) 22:19:47.14ID:Jgs7UTKm
ぼくが書くような小規模のプログラムはfreeが必要なほどメモリ食わない
そしてメモリを逼迫するまえにプログラム自体が終了する
いつもfree書くけど書き忘れてもあんしん!!
313デフォルトの名無しさん
垢版 |
2014/09/27(土) 22:35:10.84ID:lv9b6q1l
bashがfreeしないくらいだから、必要ないんじゃない?
2014/09/27(土) 22:45:58.39ID:2YkqVza8
>>309
> どうでもいいだろ。

能天気乙 w
2014/09/27(土) 22:48:39.13ID:dBgfCEST
今どきのOSではプロセス殺せば
ヒープなんて勝手に開放されるから
リソースのなかではある意味一番
リークしてもダメージの少ない
類いではあるよね

ヒープ以外のリソース開放には無力どころか
RAIIがしにくくなる分害悪にすらなる
GC付言語がこうまで持て囃されている
現実は不思議すぎる
2014/09/28(日) 01:10:09.70ID:sHyLw6pq
> 能天気乙 w

極端な話、メモリが100M越えたら強制終了でも構わないアプリ、なんてのもいくらでも考えられるが、
そういうのも全部「能天気乙 w」って攻撃するんだなw

ただのバカだった、で終了。
2014/09/28(日) 02:36:06.63ID:ri3k0THz
>>299
「許容可能な場合は」←これ省略する馬鹿が居るからfreeしろって言われるんだよ。
>>303-304
開放処理が負荷になるケースのためにexit用の開放処理を一式再実装するとか、
通常の開放処理の中でexit確定フラグ見て開放処理をスキップするとか…面倒くさいね。
開放処理の負荷がヤバイことになるってケースが想定されない限りやりたくねぇわ。
>>309
cpの開放処理コストも普通に使う分には「どうでもいいだろ。」って言われそうやね。
>>315
徐々にリークが増えてく場合、仮想メモリ空間なりスワップ領域なり食いつぶして死ぬ。
ていうかオブジェクト開放時にリソースも開放する設計にしとけばリソースも回収できる。
GCは俺も余り好きじゃないが、GCがメモリだけ回収してリソース回収しないって認識は流石に…
2014/09/28(日) 02:56:51.92ID:MgcGxJig
>>317
そりゃ、プログラム終了までに開放すれば良いような、ヒープみたいなリソースなら良いけど、ファイルにしろDBにしろ他のプロセスなどと共用するリソースは、必要なくなったら即時開放が必須だろう。
2014/09/28(日) 07:40:32.09ID:YI897KP6
今の時代だとGC搭載のプログラムで動かしまくってるからなぁ
メモリなんてほぼ無限
Cのような言語で組まれたものならfreeしなくても大差ないくらいだよなぁ
でも入れるけど
2014/09/28(日) 08:12:04.95ID:fth8YQlj
>>316
ただのバカ乙 w
2014/09/28(日) 10:18:03.79ID:sfiCrzAs
> ていうかオブジェクト開放時にリソースも開放する設計にしとけばリソースも回収できる。
> GCは俺も余り好きじゃないが、GCがメモリだけ回収してリソース回収しないって認識は流石に…
↑ こいつ最高のバカ
メモリの使用状況をトリガーとするGCでメモリ以外のリソースも管理するとか。死ねゴミクズ。
2014/09/28(日) 11:05:15.19ID:yTX/1oq/
>>309
win31時代の話をされても
2014/09/28(日) 11:07:23.91ID:yTX/1oq/
>>321
GC はメモリ回収しかしないと思うよ、OSリソース回収は自分で書かないとね
C# や Java にもデストラクタがあったほうがよかったと思うことがしばしば
2014/09/28(日) 11:08:13.02ID:57+mjdrX
メモリリークもゴミみたい思える大きさだから、freeしなくてもいいって?
2014/09/28(日) 11:12:12.60ID:yTX/1oq/
リークを定義できない人間がfree()不要論を朗誦しているんですよ
2014/09/28(日) 11:52:29.34ID:FAkptdZZ
keep it simple stupid を誤解釈すると free不要になるのかも知れない
2014/09/28(日) 11:56:57.44ID:WvBy1dAf
レベル0: 常にfreeを書かない
レベル1: 常にfreeを書く
レベル2: 条件に合わせてfreeを省略すべきときだけ省略する
2014/09/28(日) 13:53:02.44ID:RpCDBRzc
ま、この場合のkissは「常にfreeする」か「一切freeしない」のどちらかだろうな
ハイブリッドにするのは最適化に近いので、最後の手段としたい
2014/09/28(日) 14:11:49.10ID:sHyLw6pq
>>328 そんな単純なことすら理解できず教条的に「freeしろ」と叫ぶだけのバカが、
まだこんなに多いとわかった、ってのが収穫だな。
2014/09/28(日) 15:07:03.68ID:RpgaQOqc
ポリシー君乙 w
2014/09/28(日) 16:34:11.76ID:yTX/1oq/
>>329
君、free() が不要な例と絶対に必要な例とをコードで示してくれないか?
2014/09/28(日) 17:17:57.68ID:57+mjdrX
楽(らく)したいだけの人だから、答えられ...
333デフォルトの名無しさん
垢版 |
2014/09/28(日) 17:24:58.28ID:SkMDQSso
mallocしたら必ずfreeという決まりは手抜きだったってことですかね。
解放の必要性を吟味して決めなければならないという事でしょうか。
334デフォルトの名無しさん
垢版 |
2014/09/28(日) 17:26:58.87ID:SkMDQSso
これはRAIIは原則禁止したほうが良い。
言語にGCを組み込むのは禁止したほうが良い。

こういったことでしょうかね。
2014/09/28(日) 17:28:24.15ID:sfiCrzAs
freeしなくても良いか検討した上でfreeしないのだから、
ボンクラはガタガタ言うな。

と言うこと。
336デフォルトの名無しさん
垢版 |
2014/09/28(日) 17:34:34.94ID:SkMDQSso
開放忘れは指摘するべきではないということですかね。
2014/09/28(日) 17:37:26.24ID:57+mjdrX
わからない(わかってない)人に
間違ってます
とか言うと怒りますから
言わないほうがいいでしょうね
338デフォルトの名無しさん
垢版 |
2014/09/28(日) 19:08:55.44ID:SkMDQSso
>>337
間違ってます。
2014/09/28(日) 19:30:37.85ID:lwUZotcA
>>332
> 楽(らく)したいだけの人

検討したつもりになってるだけの人の可能性もあるぞ w
2014/09/29(月) 00:58:09.40ID:3GxNQMYW
>>337
それは真実だけど、そこを頑張らないと
2014/09/29(月) 00:59:53.42ID:xSX/Gj/Z
社会性ないから無理
2014/09/29(月) 07:47:22.78ID:wd4qvqdb
>>341
>社会性
「貴重なご意見感謝いたします」「鋭意善処して参ります」と放言して気分すっきりさっぱりする能力のことですね
343デフォルトの名無しさん
垢版 |
2014/09/30(火) 12:17:08.51ID:v0Hutm1t
Windowsは必ずFreeしないとクラッシュすると犬板で言ってた。
データ消えて大変だったらしい。
2014/09/30(火) 21:27:53.75ID:GBpQF1/L
UNIXでは非rootはリソースを使い切れないとかあるし、
コミットチャージを使い切ると次にメモリ確保しようとした奴が失敗する(たいていはそいつが死ぬ)から、
まぁ分からんでもないけど……OOMで無差別殺人されてるLinuxのユーザがそれを言うかね?
2014/09/30(火) 22:12:00.11ID:N6uFkPfQ
OOMキラーは一定のルールで重要なものを残すようになってるから
無差別殺人じゃないぞ。そんな基礎的なことも知らんのかね?
2014/09/30(火) 23:27:55.38ID:j0qHbCkI
そりゃ無差別殺人者だって本当に相手を選ばないことないからな
弱そうな奴とか、特定の人種とか
2014/09/30(火) 23:57:18.37ID:Z3ryMPKI
殺されないように、プログラムの先頭でおまじないを唱えよう。
2014/10/01(水) 13:45:52.76ID:n9ZGXeJV
いや一番ため込んでる富豪を狙い撃ちするんじゃね
2014/10/03(金) 11:53:06.51ID:8OTaypIY
C heap is cheap
2014/10/04(土) 09:03:51.86ID:X8tclADN
C's heap is not cheap but smple..
2014/10/04(土) 16:22:32.12ID:nRIrCQg7
freeしたいやつはして、したくないやつはしなければいい
それだけ
以上
終了
おつおつ
2014/10/04(土) 18:14:13.44ID:j+aw4iLv
ちゃんと free( ) できない奴って、いつも最後はその結論だね w
2014/10/04(土) 19:34:40.00ID:WpG7hkwu
教条主義者による断末魔の煽りって、いつもこうだよねw
2014/10/04(土) 19:58:41.25ID:ugcUiR2p
挙げ句の果てに
system("ls -l ./prog"); えいっ
2014/10/04(土) 22:12:06.07ID:X8tclADN
い、extern は要らない子ぉっ!!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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