-
プログラム
-
mallocの後にfree不要と言うバカいるの?Part2
-
UPLIFTで広告なしで体験しましょう!快適な閲覧ライフをお約束します!
fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)
前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/...cgi/tech/1352812333/ - コメントを投稿する
-
ここまでのまとめ
・freeいる派完全勝利
・freeいらない派のくさおが発狂、レスを流すのに必死
・freeいらない派のくさおがバグ付スタックオーバフローソースを作成、
身をもってfreeは危険だと主張
・freeいらない派のくさおが自演を開始、自画自賛を始める
・freeいらない派のくさおが自演を指摘され遁走 ←いまここ -
前スレ1
1 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/13(火) 22:12:13.29
前提1:一般的なC言語(GC搭載していない)
前提2:main関数は除く
前提3:関数実行後すぐに終了するとは限らない
前提4:関数は何度も使われることがある
これがメモリリークするのは当たり前の話で、
mallocをしたらfreeするのは当たり前。
free不要論とは一体何だったのか。
天邪鬼(バカ)が言葉尻を捉えていただけではないだろうか。
まつもと ゆきひろもそのバカの一人だったらしいね。
例外中の例外を除いて、mallocをしたらfreeは必要。
これが真の答えだろう。 -
freeいる派の主な主張
・mtraceが通らないとか論外
・対にするようにしておかないと悪癖が身に付く
・そもそも最後にまとめて解放すること自体が論外
freeいらない派の主な主張
・freeでバグる可能性があるから解放したくない
・プロセスの終了処理に黙って解放されるほうが終了処理がはやい -
なんかスレ立てたら賢者モードになっちゃったよ。
前スレで議論してたのがうそみたい。
ところで、Perl、Python、RubyなんかのP言語が猛威をふるい
Javaなんかもガベコレ積んでるし、
Windowsアプリの主要開発言語もC#になろうかとしている今、
今後、手動でメモリ確保、メモリ解放しなきゃならない環境ってのは
どういうのが残るかなぁ
AppleのObjective-C、組み込み開発、ドライバ、OS等のハードに直結した部分
数値計算とかそういう純粋に速度が要求される分野
思いついたのはこのくらいなんだけど
他にないかなぁ -
Objective-Cは最近は手動じゃないっぺ。
-
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所 -
freeする前に終了しちゃえばいいさ
-
「main 以外」なんだからねっ!
不毛な議論しちゃダメ、絶対。
ところで、exit 適用時も議論対象外に、入りますか? -
「main以外」抜いたここは別スレだろ
-
こっちが本スレで向こうが隔離スレでしょ
この議論はUNIXの"悪習"が元凶のような気がしてきた -
ぶっちゃけ2000年問題と同レべの手抜き習慣
-
俺もOS評価するときにOS再インスコが
必要になったらPCの電源をブチっと
落とすけど、そんな感じ? -
使い捨てのプログラムで、コンパイラみたいな一度走って終わりのプログラムなら、
全部mallocしっぱなし、ってこともある。時と場合による。 -
"main以外"を抜いて、また1からやり直したいのか?>>1は
-
スレチだが、
sprintf(buf,…);
len=strlen(buf);
という低脳なコードを久しぶりに見たw -
946 :デフォルトの名無しさん:2013/01/29(火) 22:41:57.29
そもそも最後にまとめて解放すればいいという設計がおかしいんだよ。
最後にまとめて解放するくらいならプロセスの終了に任せれば、って
話になるのはそのため。
mtraceの話も出てるけど、リストだろうがツリーだろうが、使っていると
認識している箇所だけを正しく解放していって、最後に何が残るかを
見ないとリークしてるかどうかなんてわからないだろ。
最後にツリーまとめて消してみたら全部消えたのでリークしてません、
なんてことにはならないんだから。
そこに解放したつもりになっているデータが連結されているかどうか
というのが重要なのに。
947 :デフォルトの名無しさん:2013/01/29(火) 22:45:04.83
こりゃまた大きな釣り針だな。www
948 :デフォルトの名無しさん:2013/01/29(火) 22:47:30.66
くさお悔しくて絶好調だな
949 :デフォルトの名無しさん:2013/01/29(火) 22:47:59.75
>>946
まとめて消して消えるならリークしてないだろ。バカか。 -
>>17
それやったことあります。汚物見せてごめんなさい。 -
100%ありません
-
>>17
俺も数えるのめんどくさくてやってしまいそうだが。正解は? -
>>24
len = sprintf(buf,…); -
「低脳」
草生やし
卑屈で低レベルな煽り
…まともに相手する必要を認めず。 -
>>29
敗北宣言ありがとうございますw -
議論を勝ち負けで考えているかぎり
お前らの勝ちは一生ありえないよ。 -
>>22
そもそも2行目が不要なことを理解できない低脳君乙。 -
いつもの草男がだんだん本性を現してきました
-
つられたバカが悔しがってるな。 wwww
なんでバカって簡単につられるんだろう。 あっ、バカだからか。wwww -
>>22がバカだからくさおだろう
-
>>22が書きそうなコード
if(p!=NULL)free(p); -
>>38
基地外スレであんまり真面目ぶると、逆に工作員認定される -
↑くさお書き込みテンプレ
-
>>38
freeにNULLを与えた時の動作が標準化されたのはC89からだったはずだから、
20年くらい前のソースならそのように書かれていても不思議じゃない。
作ったライブラリが予想もしない所で使われるかもしれないから、
freeしろとかほざいているfreeバカは、NULL与えるとSEGVする環境(SystemV)に
持って行かれるかもしれないからチェックしろとか言わないのか? wwww -
終了時にメモリ解放してくれるのはどのC言語の規格書に書いてるの?
-
>freeにNULLを与えた時の動作が標準化されたのはC89からだったはずだから、
馬鹿死ね
K&R1 からだ
realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名 -
>>37
コンパイラが最適化してくれるので問題ありません。 -
>>45
しない
コンパイラからはfree() は単なる一つの関数にしかみえない
p が 0 のとき free(p) はなにもしないことは、コンパイラはしらない
勉強不足だ、これではwww野郎やQZすらの相手にもならない
死ね -
>>46
素人乙 -
>>46
コンパイラがライブラリの仕様を把握していないと矛盾が生じます。
printfが書式文字列に従って値を表示することをしらなければ出せない
はずの、書式文字列と引数があっていないときのwarningを出せます。
同じように、if(!p)free(p)という悪しき慣例があることも知っています。 -
>>49
なんでfreeのほうを省くの?バカなの?死ぬの? -
本日の大バカ晒しage
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ
49 :デフォルトの名無しさん:2013/02/03(日) 13:47:08.31
>>47
ではfree(0)を省いてくれる処理系を挙げてみよ -
逆に、mallocがNULLを返したかチェックしない人多いよね。
LinuxではNULLが返ってくることはないというのが理由らしいんだけど。 -
成功した振りして使用時に落ちるの何とかして欲しい
-
OOM Killerで他のプロセスが殺されるとか、糞仕様すぎる。
-
反論できなくなると開き直る
-
>>46
お前がオレさまの相手をするのは、バカすぎて無理。wwwww
うんこQzからかって遊ぶだけにとどめておけ。wwww
その処理系のライブラリが
inline void free(void *p)
{
if (p)
read_free(p);
}
という実装だったら、
> if(p!=NULL)free(p);
はコンパイラが最適化できる。 wwww -
>>59
> realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名
「これは有名」の「これ」とは何かね? wwww
バカの文章は読みにくい。 wwww -
>>45
コンパイラが最適化してくれるというのは、そうかも知れない。
でも、しないかもしれない。
また、それは可読性を下げてまでやるべき事ではないと思うがな。
もしかして IOCCC に出品するつもりとか?
そして、やり方としては、無茶な仕事を下請けへ丸投げするのと
全く同じなんだよね。
技術的な裏付けは何にも無いけど、彼奴等に投げておけば
何とかするだろう、レベルの発想。 -
それは↓を言う前に言うべきだったね。 wwww
自信たっぷりに否定した後で、可能な事を示されてからじゃ遅い。 wwww
お前はヘボなんだよ。wwww ヘボ同士でうんこQzと絡んでるのがお似合い。wwww
本日のバカ wwww
> From: [46] デフォルトの名無しさん <sage>
> Date: 2013/02/03(日) 13:37:59.35
>
> >>45
> しない
> コンパイラからはfree() は単なる一つの関数にしかみえない
> p が 0 のとき free(p) はなにもしないことは、コンパイラはしらない
> 勉強不足だ、これではwww野郎やQZすらの相手にもならない
>
> 死ね
>>45は前スレのオレの真似をして煽っただけだろう。
十中八九inlineで最適化なんて思いついていない中防。。
そんなのに釣られてバカ晒す事になった>>46が憐れでならない。 wwwww -
全ては、その1個の積み重ねなのだよ。
-
>>62
呼ばなくていいなら関数呼び出しは少ないほうがいい場合もある。
そういう意味でif (p) free(p)は、意味はある。
機械語にしたところでfreeを呼ぶためにレジスタにロードするので
zeroチェックはそのついでで行うことができるし、ifのほうは
大したペナルティにはならない。 -
freeがinlineになっているクソな処理系ってなんだよ。
-
>>64
linux上でman mallocをよく読め。 -
>>67
NULLがzeroだなんて誰が決めたの? -
ところで明日振り替え休日で休みだよね。
-
NULLは(仮に機械表現が全ビット0でなかったりしても)コンパイラ(言語)の上では0だよ?
そんなことも知らずにこんなスレで暴れようと思ってるの? -
>>60
>その処理系のライブラリが inline void free(void *p)
お前も馬鹿か?
標準ライブラリがソースで提供されているとでも?
普通はobjやlibではないか?
そんなバイナリをインラインにできるとでも?
死ね -
>>73
#include <stdlib.h> -
>>61
やさしい日本語しかよまない/よめない馬鹿なんだね、指示詞を敢えて差し込むのはよくやること
>前項の目的を達するため、陸海空軍その他の戦力は**これを**保持しない。
>国の交戦権は**これを**認めない。
>> realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話であればこれは有名
>「これは有名」の「これ」とは何かね? wwww
「realloc(NULL, size); がmalloc(size) と等価にならないかわいそうなバグがある処理系が存在した話」
だね
死ね -
>>74
死ね -
>>71
ということにしたいのですね:-P -
len = sprintf(buf, "%c", 0)
len => 1
strlen(buf) => 0 -
しかしこのネタは昔から盛り上がるんだけれど、リアルで素のmallocをアプリレベルでそんなに呼ぶものなのか?
組み込み云々言っている奴もいたけれど、俺が関わってきた範囲では分断の問題で直接使うことはないな。
素のmalloc/freeは遅くて使い物にならないって環境って場合もあったけど。
最近はRAM自体はそこそこのっている環境も多いんでスタック増やして、C99にして可変長配列使うっていう手で
かなりの部分が楽になった。
人命云々言っている奴、プロセスの概念がある世界ならば、なるべくプロセスの寿命を短くするって方向も
考えたほうがいいぞ。最初からmalloc/freeだけに限らずバグの全くない大規模なプログラムなんて
妄想だと思ってシステム作ると、頑強なものができるから。 -
マルチスレッドだと、スタックサイズが固定になるのでautoにでかいのを置くことは
必然的に避ける事になる。 これ位は常識だぞ。 wwww
> 最初からmalloc/freeだけに限らずバグの全くない大規模なプログラムなんて
free楽勝と豪語しているfree必須バカは全くバグのないプログラムを作れるらしいぞ。wwww -
>マルチスレッドだと、スタックサイズが固定になる
無知発見w -
>リアルで素のmallocをアプリレベルでそんなに呼ぶものなのか
>素のmalloc/freeは遅くて使い物にならないって環境って場合もあったけど
自分が特殊な環境にいたと自負してる時点で1行目が死んでるよ -
>>81
> マルチスレッドだと、スタックサイズが固定になるのでautoにでかいのを置くことは
> 必然的に避ける事になる。 これ位は常識だぞ。 wwww
おいおい、組み込みの世界だと元々スタック1Kとかふつーだったのが、それを64Kにすれば
楽できるとかそういうレベルの話だよ。 -
死ねの人は息してる?w
-
>>80
確かに素のmalloc()/free() を直にソースに散らばらせるのは好ましくないね
QZですらアロケータ経由だったようだし
昔のlisp処理系ではタイプごとにアロケータを別に準備していたようだねセル用とかね64KiBのシステム用だったけれど -
>>81
>free楽勝と豪語しているfree必須バカは全くバグのないプログラムを作れるらしいぞ。wwww
楽勝とはいっていないがmalloc()/free()くらいは完全に管理できるだろうねアロケータを準備したりしてね
お前はそれができないからmalloc()/free()を使わないんだろう?
死ね -
(このままじゃくさおが生霊に殺されそう…)
-
炎上学習法が効果的に利いていますね
↑今すぐ読める無料コミック大量配信中!↑