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/
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 は要らない子ぉっ!!
2014/10/04(土) 22:25:18.34ID:j+aw4iLv
>>353
おうむ返ししかできなくて悔しいね w
2014/10/04(土) 22:57:28.17ID:WpG7hkwu
ワンパターン・バカがそれを言うと趣があるな
2014/10/04(土) 23:15:41.65ID:8UXXAPps
ワンパターン・バカ = いつものおうむ返し w
2014/10/04(土) 23:19:29.91ID:j+aw4iLv
>>357
お前か言うと重いなあ
そろそろお薬飲んだ方がいいんじゃないかな w
2014/10/05(日) 00:25:31.58ID:FZuSwsnO
芸人の持ちネタにそこまで過敏にならなくても‥
2014/10/05(日) 00:31:49.02ID:6amJApcn
あんたらもしかして頭は悪めな方??

>>351で終了だお
2014/10/05(日) 07:09:36.34ID:fbEOqD5u
無限ループ乙
363デフォルトの名無しさん
垢版 |
2014/10/09(木) 18:57:30.60ID:vRdoCwIm
標準のアロケータは万能じゃないから、カバーしきれない用途は自前で用意するって
話なんだけど、freeするのはアホって話で>>1000目指すよ。
用意いいかい?
2014/10/09(木) 20:36:35.27ID:9/qS7Lgu
おっけー
2014/10/09(木) 20:53:58.60ID:tOThY/oR
>>363
free/delete しないのなら自前のアロケータなんか要らないのでは?じゃんじゃん malloc() すればいいだけの話
366デフォルトの名無しさん
垢版 |
2014/10/09(木) 23:16:03.38ID:vRdoCwIm
せやな。
RAM512KBでも普通に動いてたしな、16GBも有ったら解放する必要あらへん。

知ってるか?
16GBは64億個の0と64億個の1が有るのや、合わせて128億個やで。
128億という数は、地球上に有るすべての砂の数より多いねんで。
こんなん使い切れるわけあらへんしな。
2014/10/10(金) 00:31:13.03ID:sOr9aeNy
一人ではね。
2014/10/10(金) 04:16:27.17ID:KCO91E8u
人間だけでも70億人以上いるらしいんだが
世界の砂ってそんなに少ないのか
369デフォルトの名無しさん
垢版 |
2014/10/10(金) 07:42:18.41ID:JpN3UDQu
てか、GCって駄目じゃね?

GCあってもメモリリーク問題解決してないやん
なら、最初から自分で管理するという教育をした方が良くね?
2014/10/10(金) 08:11:32.03ID:Npcpt0Da
freeしたいやつはして、したくないやつはしなければいい
それだけ
以上
終了
おつおつ
2014/10/10(金) 08:30:54.00ID:kwgAp7cQ
>>368
冷静かつ的確な指摘すぎてワロタ
2014/10/10(金) 12:50:29.54ID:4Jxm1TDD
>>370
また、無限ループか
free() できない奴のアホさが滲み出てるな w
2014/10/10(金) 18:16:01.82ID:Xd6YjWLK
そりゃ何を free() していいのか、何を free() しなくていいのか、わかっていないからね‥
374デフォルトの名無しさん
垢版 |
2014/10/11(土) 01:03:15.48ID:ZmK/zNnJ
freeしない生き方を選択したとき、精神は解放されるんやで。
覚えとき。
2014/10/11(土) 06:58:25.56ID:BpoU1i8h
>>374
C/C++ を諦めて C# に行くんですね
もう帰ってこないでね w
2014/10/11(土) 09:22:03.50ID:8nW7oHJ6
>>370
いやこれでまじで終了だろ
2014/10/11(土) 09:33:07.63ID:Qk2dzUbv
>>374
非マの生き方を選択したとき、精神は解放されるんやで。
達者でな。
2014/10/11(土) 09:42:45.54ID:/AOb9xWD
クラスの中に放り込んで管理してるから、freeしたくなくても勝手にfreeされるんだが
2014/10/11(土) 10:00:29.43ID:BpoU1i8h
>>376
はいはい、終わりだからもう来るなよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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