main以外★mallocの後にfree不要と言うバカいるの?
前提1:一般的なC言語(GC搭載していない)
前提2:main関数は除く
前提3:関数実行後すぐに終了するとは限らない
前提4:関数は何度も使われることがある
これがメモリリークするのは当たり前の話で、
mallocをしたらfreeするのは当たり前。
free不要論とは一体何だったのか。
天邪鬼(バカ)が言葉尻を捉えていただけではないだろうか。
まつもと ゆきひろもそのバカの一人だったらしいね。
例外中の例外を除いて、mallocをしたらfreeは必要。
これが真の答えだろう。
10年前の俺を見ているようだ
昔のアプリはサーバーなんてものは考えられておらず
アプリ(CUIしかない)は実行したらすぐに終了していたんだよ。
だからfreeしなくてもいいとかいう間違った考え方が生まれた。
exitで脱出したい時にもいちいち手間掛けてfreeすんのか、って話だとか聞いたけど。それなら
確かにfree要らんわな。
freeしても大抵マークするだけだしプロセス終了時に開放されるからfree不要、って話の方には、
基本的に賛同しないけどな。してもしなくても変わらないケースも多いが、変わるケースも少なく
ないし、freeを省略する利点も無い。実行形式をとことん小さくしたい時くらいかね。
>>1 つか、その前提条件はmalloc-free論争のときのと違うし。
>>3 基本的に終了しないアプリなんて、それこそC言語が生まれる前からあるだろ
free地獄
a = malloc(10);
if (error) {
free(a);
return;
}
b = malloc(10);
if (error) {
free(a);
free(b);
return;
}
c = malloc(10);
if (error) {
free(a);
free(b);
free(c);
return;
}
process();
free(a);
free(b);
free(c);
return;
8 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/11/14(水) 14:58:41.81
a = malloc(10);
if (!error) {
b = malloc(10);
if (!error) {
c = malloc(10);
if (!error) {
process();
}
free(c);
}
free(b);
}
free(a);
return;
>>1 > 前提2:main関数は除く
> 前提2':exit関数を呼び出す場合を除く
これを除外しないのがfree教信者。前提が違う。
>>7-9 それはfreeの問題じゃなくて書き方がアホなだけだ
少々リークしたってプログラムが終われば無かったことになるから問題ない←free不要派
ジョブから呼ばれる小さなルーチンを沢山書いてきた
UNIX系の人にメモリーに限らずリソース開放軽視してる人多かったな
PC育ちの自分にとってはそんな書き方したらマトモに
動かなかったから信じられなかったけど。
プロジェクト全体のリソース管理状況をチェックする担当になった時に
リークチェッカーに引っかかった箇所を、それぞれの担当者に
修正お願いするんだけど、サーバーとの通信部分を担当してた
男版お局さんみたいな人に、DLL解放時にリークしてるところが
あるから修正してくださいって頼んだけど最後まで無視されたな。
実際はプロセス内で何度もロード・アンロードするところだから
問題有ったんだけど、事を荒立てないように見なかったことにした。
立場の弱い人間には強制的に修正させたけどね
韓国の会社が作ったUNIX用の結構大きなソフトのWindowsのポーティングも
やったけど、それもリークが酷かったな。
あの当時、Windowsが糞OSとか叩かれてたけど、ちゃんと書いたプログラムは
ちゃんと動くのを身にしみてたからMSが気の毒だった。
どんな優秀な人でも、一度身についた悪習は中々直せないもんだよ
>>14 お前、malloc-free論争のこと全然知らないだろ。
知らないなら黙っとけ糞が。
昔の自称"議論"が永遠に有効だと思ってる人って居るよね。
17 :
デフォルトの名無しさん:2012/11/14(水) 19:13:10.34
> main関数は除く
なぜ?
main関数はfree不要なら、他の関数でも同じじゃないの?
18 :
デフォルトの名無しさん:2012/11/14(水) 19:44:08.68
そりゃmainも除いたらだめよ
mainでmallocして使われなくなってもそのあとまだまだ続かないとも限らないんだから
「関数終了時」を話題にしているのは明白だろ。バカは死んでくれ。
mallocしたらfreeする。
そんなのは当然だ。
ただし例外があるというだけの話。
21 :
デフォルトの名無しさん:2012/11/14(水) 22:08:12.11
>>20 その例外がさも一般的なことであるかのように
話をしていたのが、free不要論なんだよなw
今の時代、free不要とか言い出したら
キチガイ認定されるだろう。
「free不要論」とやらの正体が分かんねぇんだよな
A「プロセス終了時に開放してくれるOSでは、exit()を掛ける前にもfree()する必要は無い」
B「free()しなくてもどうせ変わらんから要らない」
どっちの論理なのかのソース出せよ
Aだと思い込んでる奴と、Bだと思い込んでる奴と、言い合っても話が通じるわけねぇだろ
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
>>23 ここまで来てからそれか。
敗北宣言と見なされるぞw
>>20 freeするのは当然じゃないよ。
「freeしなければならない場合がある」というだけでそれ以外は不要なんだが、「それ以外」がどういう
ときなのかわからない人が「freeするのは当然」と思考停止してしまうのが論争になった原因。
思考停止してるのはお前
どうせド素人なんだろうけど
27 :
デフォルトの名無しさん:2012/11/15(木) 13:27:47.33
>>25 思考停止するからダメだって話なのか。マジかよ。激しくダサいなw
心理学者かよwww
むしろmallocが不要
普通は「メモリの解放?何それ、おいしいの?」ってなるようなコードを書くんだがな。
free()しない奴にライブラリや共有オブジェクト作らせたくないわ
GCが働いてくれる言語でバグ出さないようにしてもらえればそれで十分
こっちくんな
31 :
デフォルトの名無しさん:2012/11/15(木) 22:53:47.27
未だにC言語で型保証なしのmallocかよw
32 :
デフォルトの名無しさん:2012/11/16(金) 00:11:11.37
>>25 で、思考停止しないで考えて出した答えは
やっぱりfree必要なんだろ?
そのソースを教えてくれ。
>>22のAに反対の奴とかBに賛成の奴とかっているの?
スレッドの走行中に、
たとえば、スレッドがファイルを開いたり閉じたりしている場合、
しかも、スレッドを止めないで親が終了した場合、スレッドのオブジェクトは、解放されますか?
環境依存
※この自動車は連続30分走行するとブレーキが利かなくなります。
定期的にエンジンを再起動してください。
ニュースグループかよw
>>36 ※この自動車は連続○分エンジンブレーキで走ると
エンジンがフリーズして二度と動かなくなります。
定期的にエンジンを空吹かししてください。
混合油2スト時代の常識w
mallc()/free() では信者を巻き込んで熱くなる議論も、これをfopen()/fclose() に置き換えるとまったく結論が異なるようだ。
「fclose() しなくてもOSがディスクリプタを回収してくれるから無問題したがってflocse()不要」という主張はあまり耳にしないのだが?
>>39 いやその話だって処理系に依存することには変わりはない訳で、本質は同じでしょ
>>39 OSが回収するのは「ディスクリプタ」じゃないけどな
>>39 そうか? むしろそちらの方を良く聞いたが。
使い捨てのスクリプトなんかは close しないのも結構あるんじゃないか。
>>42 ふむ。確かに一つのディスクリプタを複数のプロセスで共有しているときに、ひとつのプロセスが終了したからといってディスクリプタ自体を閉じてしまっては一大事ですね。
このあたり疎いのでもしよろしければ参考本を教えてください。
>>40 >>43 んー、最近はclose()/fclose()論争をあまりきかないので‥‥こんど煽ってみよう‥‥
>>41 みつかったか :-)
Cでgotoを使っていいか悪いか、にも似てるな
使っていいとこはあるけど基本使うなよ、でも無理に使わないことも無いよ、っていうあれ
46 :
デフォルトの名無しさん:2012/11/19(月) 23:08:57.86
今となっては過去の論争だからねぇ。
今だと誰もがfreeすべきだと答えている感じなんだが、
昔はなぜかfreeしなくていいのが多かった感じがする。
しかも詳しい人ほどfreeしなくていいと言ってるみたい。
やっぱ昔はfreeするコストとかまで気にしていて
綺麗なコードよりも、技巧的で速いコードが好まれていたってことかねぇ。
47 :
デフォルトの名無しさん:2012/11/19(月) 23:40:20.28
単にUNIXとかは短いプログラムを
ジョブからプロセスキックする様なシステムが多かったから
いちいち解放しなくてもOSが勝手にやってくれるじゃん
みたいなことじゃね?
そもそも、昔のプロのプログラマーの環境はリソース足りなきゃ
ハードを増強すりゃいいだろみたいな考えだったし。
そして、昔はUNIXプログラム=プロのプログラム
パソコンプログラム=アマチュアみたいな感じで下に見る傾向が強かったから
UNIX文化=常に正しいみたいな根拠のない流の議論になってたんじゃないかな
48 :
デフォルトの名無しさん:2012/11/19(月) 23:46:27.03
そういう人たちってもう死んだの?
当時そう言っていた人が
今は考えを改めたのか知りたいんだけど。
今はfree不要論者全然いないし。
そういう人たちもfree不要って言ってたのはUNIXコマンドみたいなメモリ常駐期間の短いものを対象に言ってただけで
今みたいな何時間も何日も起動しっぱなしのプロセスについてはfree不要とか言わないよ
それに昔はメモリをそんなに積んでなかったから設計時に全てメモリ使用量を計算済みだったから
プログラムの最初に大方確保してそれを使ってたからね
今みたいに任意のタイミングに動的にメモリ確保とかそんな贅沢できなかった
>>48 おっかしいなー、
宿題スレではfree()信者はそれこそ「信者」扱い、free() を省略できなければどんくさい、くらいの価値観が通っているんだけれども。
ダングリングポインタや、手放してしまって金輪際free() できない領域(これなんていうんだろ?)が発生しなければ OK くらいが落としどころになってる。
51 :
デフォルトの名無しさん:2012/11/20(火) 02:14:00.81
>>50 だからそれ、プログラムが完全に終わる直前の話でしょ?
プログラムのすべてをmainでやってるのならともかく、
普通関数の形にするよね。その関数はどういう呼ばれ方をするか
わからないものとして作るから、mallocしたらfreeするよね?
結果的にfreeしないということなんて現実にはまずない話だと思うんだが。
freeを省略できる条件を明確にして欲しいよ。
あ、もちろんエラーで強制終了する場合は除く。
>(これなんていうんだろ?)
リーク
>>50 あれはfree教教組が教義を押し付けたけど、その教義がマヌケという事実を
指摘されて火病ってるだけ。
>>51 > プログラムのすべてをmainでやってるのならともかく、
> 普通関数の形にするよね。その関数はどういう呼ばれ方をするか
> わからないものとして作るから、mallocしたらfreeするよね?
関数の形になってても省略可能な例
main()
{
create_object();
print_object();
}
> 結果的にfreeしないということなんて現実にはまずない話だと思うんだが。
* 寿命がmainに等しいシングルトンなオブジェクトは現実的にも普通にあるし
よく使う。このようなオブジェクトはfreeしなくてもよい。
* BoehmなどのGCは「これまでにアロケートしたものをすべて解放」なんてい
うインターフェースはもっていない。ルートポインタをNULLにして回収を
試みてもコンサバティブGCなので回収できることは保証されていない。
そしてBoehmを利用しているプログラムは現実的にたくさん存在する。
> freeを省略できる条件を明確にして欲しいよ。
自分で考えろ。それを他人に押し付けるな。
>>53 >関数の形になってても省略可能な例
ん?簡略化しすぎているんじゃない?
>シングルトンなオブジェクト
静的にもつほうが多いようなきが
BoehmGC がすべて開放するようなインタフェースを持たない、としてもそれはGCだからでは?
GCにたよらず自力本願なC++において、デストラクタを定義しなくともよい場合がある、という主張はあまりきかない。
>教義がマヌケ
正常系でもfree()しないのはねえ‥‥
55 :
デフォルトの名無しさん:2012/11/20(火) 08:40:51.06
>>53 お前、create_objectの実装しってんの?
関数使う側は内部の実装のことを気にしないものだよね。
create_objectがもし一時ファイルとか作っていたらどうするの?
delete_objectしないとだめだよね。
>>54 教組登場。バカは引っ込んでろ。www
>>55 > お前、create_objectの実装しってんの?
知ってるよ、delete_objectが用意されてない事も。
「mainで全部やらない」という事への反例だから。
即ち...
テキストファイルを閉じてもメモリを開放しないマルチテキストエディターが作りたいということか...
今さらCでテキストエディタは作りたくないな
>>46 単に
「どんな場合でも確実にリソース解放できるわけじゃないから、
実用上問題になるケースだけリソースを開放すればよい」
というだけ。
何が「即ち」なんだろう。free教信者の思考停止は救いようがないな。
> 教組
この手の奴は総じて日本語もダメ
結局、
・mallocしたものは必ずfreeで開放するべき
・メモリリーク障害を起こさないようにするべき
の違いでしかないんだけどね。
どうでもいいけどfree不要を唱えるバカとは一切仕事上で関わり合いたくない
どうでもいいけど、いかなる場合もfreeせよと主張するバカとは一切仕事上で関わり合いたくない
どうでもいいけどC使いたくない
>>62-63はもっともな意見だけど、
>>64も無視は出来ないよね。
私も
>>64のいわんとすることが何となく分かります。
free();しなくて良い時は、
(1) 書く人が「しなくて良い」ことが分かっている
(2) 他人にソースを引き継ぐ(または解析されることがある)場合は、
余計な解析をさせないためにコメントに明記する
これが前提にあった上で、free();しなくても良いと思いますよ。
で本題ですが、上記(1)について。
「どういう時にfree()しなくて良いのか」
私が思いつくのは、
1. malloc()は最初に1度行われ、main()を抜けるとシステムが
代わりにfree()してくれる
2. malloc()は最初に1度行われ、main()は抜けない。
無限ループ+電源断か、シャットダウンイベントによって
システムが終了する組み込み系など
他に具体例、何かありますか?
free()のコード読んでからもの言え
今時freeするなんて
古いよねー
mainだったら関数が終わるときにfreeをしなくてもいいけど、
将来外部関数としてそのmainが再利用される可能性が
ありうればfreeの処理も書いておく
まぁ、そゆこっちゃ
喧嘩するほどの話でもない
mallocでNULLが返って来たとき、ろくに出来る事も無いしexitで即死しようって場合は
すでに確保したメモリをfreeしなくても良いよね?
環境依存
余談だけど、malloc()のmanpage によると、malloc()でNULL以外が返ってきて
正常動作するなと思っていても、死ぬことあるんだね。
> バグ
> デフォルトでは、Linuxは楽観的メモリ配置戦略を用いている。
> つまり、malloc()がNULLでない値を返しても、そのメモリが実際に利用可能であることが
> 保証されない。これは本当にまずいバグである。システムがメモリ不足状態になったとき、
> 悪名高いメモリ不足解決器(OOMkiller)によって一つまたは複数のプロセスが削除される。
> 突然あるプロセスが削除されるのが望ましくない状況で使用されていて、しかもカーネルの
> バージョンが十分に最近のものであれば、このメモリを割り当て過ぎる動作(overcommittingbehavior)
> を以下のコマンドで無効にできる。
> # echo 2 > /proc/sys/vm/overcommit_memory
74 :
デフォルトの名無しさん:2012/11/20(火) 23:53:44.17
>>56 > 知ってるよ、delete_objectが用意されてない事も。
へんな話だな。
世の中の関数に、リソースはメモリの確保しかしていません。
終了時に解放処理をしなくても大丈夫ですって仕様に書いてるの無いでしょ。
どうせ自分が作った関数だからdelete_object呼ばなくても大丈夫って
知ってるとか言うつもりなんだろうけどさ、そんな話はしてないの。
他人が作った関数を思い浮かべればいいよ。
その関数がmallocをしてメモリを確保するのであれば、
逆にfreeする関数も用意している。
他人が作ったもので、他人がメンテする。だから実装がどうなってるかは考えない。
中の実装を見て、使用者側がコードの使い方変えるとか馬鹿のすること。
そう思うよね?
75 :
デフォルトの名無しさん:2012/11/20(火) 23:56:33.02
処理系依存は気にするのに
OS依存は気にしないんだなw
特定の処理系(OS)に依存したコード書くなよ。
OSが必ずメモリ解放してくれるとは限らないだろ。
76 :
デフォルトの名無しさん:2012/11/20(火) 23:58:53.07
>>64 俺は他人の意見を馬鹿にして終わりな奴より、
自分の意見をちゃんと言える人と仕事したいよ。
で、お前の意見は?
どういう場合に限ってfreeしなくていいと言う?
7.24:
プログラムが終了する前に、確保したメモリを解放しなければならな いか。
A:
その必要はない。まともなオペレーティングシステムならきっとプロ グラムが終了した時点ですべてのメモリを取り返すだろう。
にもかか わらず、個人向けコンピュータ(PC)の中にはメモリを取り戻すことが 確実にはできないものもあるようである。
ANSI/ISO C規格から結論つ けられることは、解放してくれるかどうかは「実装の品質がどれくら い高いかによる」ということだけである。
References:
ANSI Sec. 4.10.3.2; ISO Sec. 7.10.3.2.
78 :
デフォルトの名無しさん:2012/11/21(水) 00:11:49.69
7.24:
クロスプラットフォームなのでまともじゃないオペレーティングでも動かすことがあるかもしれない。
プログラムが終了する前に、確保したメモリを解放しなければならな いか。
A:
とうぜん解放する必要がある。
79 :
デフォルトの名無しさん:2012/11/21(水) 00:15:31.13
>>77 不自然な答えだよな。
OSがまともであるならと
前提をつけて結論を書いてどうするんだろう?
そのあとでまともじゃない場合があると認めてるのにね。
で、最後の行で話をすり替えてる。
標準ライブラリがまともである保証はあるんですかっ
81 :
デフォルトの名無しさん:2012/11/21(水) 00:26:55.34
俺ならこう答えるかな。
Q. プログラムが終了する前に、確保したメモリを解放しなければならな いか。
A. プログラム側でfreeしなくても通常はOSが解放してくれるので直接問題が起きることはありません。
しかしながらそのようなことを気にしなくていけないのであれば設計上の問題がある可能性が高いです。
ライブラリ自体がメモリ解放の責任をもっているのであれば終了時にメモリが確保されたままになることはありません。
ライブラリの使用者側がメモリ解放の責任を持つのであれば、適切な場所でメモリを解放してください。
それなりの規模のソフトであれば、終了間際までメモリを確保したままになることはないはずです。
82 :
デフォルトの名無しさん:2012/11/21(水) 00:33:26.31
一つのファイルに対してある処理をするプログラムを作った。
簡単なツールなのでmain一つで終わっていた。
freeは必要ないということで省略した。
そのうち拡張されコードが増えていった。
さすがに見通しが悪くなったので関数に分けた。
でもfreeは必要ないということで書かなかった。
一つのファイルだけではなく、複数のファイルに対応した
でもfreeは書かなかった。
たくさんのファイルを処理した時、メモリが足りなくなった。
freeを書かないメリットはあったのだろうか?
教義に従い倍の時間をかけて異常系にもfreeを記述していった。
異常系のテストケースが不十分だったのでフィールドでセグメントフォルトが発生した。
必死になってfreeを書いたメリットはあったのだろうか?
>>81 >Q. プログラムが終了する前に、確保したメモリを解放しなければならな いか。
俺なら
A.開放しないことでたとえなにが起きても自分で責任とれるならやらなくていい。
わざわざfreeが用意してある意味は自分で考えなさい。
85 :
デフォルトの名無しさん:2012/11/21(水) 01:17:41.31
>>83 じゃあ異常系でのみ省けばいいだろ。
今は正常な終了時の話だ。
いると認めたのなら、そういえ。
異常系を考えないなんて、学生プログラマかw
87 :
デフォルトの名無しさん:2012/11/21(水) 01:36:50.48
異常系は停止していいと答えがでてるってことだろ。
はい。この話はもう終わり。
はあ?
お前ら、ライブラリがエラーを返したら即プログラム終了かよ。
素人PGはお気楽でいいな。
89 :
デフォルトの名無しさん:2012/11/21(水) 02:00:23.23
またずれてる奴が来たね
相手にしなくていいぞ。
環境依存だろ
これ以上書く奴は馬鹿かチンパンジー↓
ウキキー(チンパンのおいらでも後片付けくらいするずら)
newの戻り値はNULLチェックする必要ある?
例外で処理するのが一般的?
deleteするときもNULLチェック必要?
94 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/11/21(水) 10:16:00.93
>>93 new(std::nothrow)の場合はNULLチェック必要。普通のnewはstd::bad_alloc例外を投げるのでNULLチェック不要。
deleteについてはNULLチェック不要。
むしろdeleteした後そのポインタにNULLを入れる行為に意味があるのかどうかのが気になるな
>>76 俺は他人の意見を馬鹿にして終わりな奴より、
自分の意見をちゃんと言える人と仕事したいよ。
で、お前の意見は?
どういう場合にfreeしなきゃいけないという?
釣られないぞ(AAry
>>96 手術中にメモリ不足で電力供給されなくなって患者を殺したらどう責任取るの?
お前の命じゃ全然足りないよ?
そういう機器だとfreeしないんでwww
>>99 ついに本性出したか
そういう機器だとメモリ確保しないという発言はメモリリークが危険だということを分かってるからだろ?
GUIアプリでもイベント報告毎にメモリリークしてれば数時間でアプリが落ちる
freeが要らないと言ってるのは職がなく暇だから面白がって煽ってるだけの連中だけ
本気でfree要らないと言ってるやつはメモリの存在を気にかけたことがない
宇宙の素粒子ひとつひとつにデータを書き込めるがごとくメモリ動的確保しまくる
そんな人間
なんで勝手に条件つけて盛り上がれるんだろう。
102 :
デフォルトの名無しさん:2012/11/21(水) 22:54:28.40
テンプレ
Q. ○○(レアケース)の場合はどうするの?
A. レアケースは例外でいいよw
103 :
デフォルトの名無しさん:2012/11/21(水) 22:57:38.25
レアケースは例外というのなら
終了前のfreeそのものがレアケースなんだよな。
アプリの長い生存期間のうち最後の一瞬でしか無い。
104 :
デフォルトの名無しさん:2012/11/21(水) 23:06:29.93
>>95 > むしろdeleteした後そのポインタにNULLを入れる行為に意味があるのかどうかのが気になるな
例外処理の簡略化のためのコードだよ。
deleteしたあとでNULLを入れておくと
例外がどこで起きたとしても
とりえあえずdeleteしておけばよくなる。
オブジェクトが存在している → deleteで消される。
オブジェクトが存在してない(NULLが代入されている) → delete NULL は無害であると保証されている。
105 :
デフォルトの名無しさん:2012/11/21(水) 23:07:58.56
>>93 かなり昔のC++はnewでメモリ不足だったらNULLが帰ってきたんだよね。
一般的にはnewはエラーが起きれば例外を発生させる。NULLは帰ってこない。
ほー、いまのはnull帰ってこんのか
書くには楽だが、なんつーか、おじさんなんでも例外っていうのはキライだな
保険のパンフも例外だらけだしな
108 :
デフォルトの名無しさん:2012/11/22(木) 01:29:45.92
>>100 お前バカだな。かわいそうなくらいバカだ。何が論点なのか全然理解していない。
>105
>一般的にはnewはエラーが起きれば例外を発生させる。NULLは帰ってこない。
値は何が入りますか
結論は>69で出てると思うんだが。
「mainだから」「exitするから」などと言って書いたコードは、その条件に依存することになり、条件が変わった途端に正常に動作しなくなる。
その際のメンテナンス性を考えて組むなら良いだろうが、freeやdeleteすら面倒臭がる輩がそんな事を気にする訳がない。
(そもそもfree/deleteの徹底自体が、再利用時のメンテを省くための知恵である。)
コード書くとき面倒でも、あとあとデバッグの段階で効いてくるんだよね。
・モジュールの中でのみ有効なオブジェクトを確保したならモジュールの中で解放する
・引数は出来るだけ(納期やパフォーマンスの兼ね合いもあるが)チェックする
面倒臭がらないよう日頃から徹底していれば、バグの原因の切り分けの手間や、
自分の担当しているモジュールの責任追求も緩和される。
>>111 追加
・モジュール内で呼ぶ外部モジュールから返ってくるエラーもちゃんとチェックする
113 :
デフォルトの名無しさん:2012/11/22(木) 02:59:50.72
もともとはfreeを書くと思考停止するって話だものw太田純www
関数内で確保と解放が簡潔するポインタは必ずローカル変数
解放せずに戻り値として返す場合は必ずグローバル変数で保管
atexit()の中でNULLじゃないポインタは全て解放
これでいけるんじゃね?
atexit()、初めて知った。
すばらしい。ありがとう。
>>114 グローバル変数使うのもどうかとおもうが、
> atexit()の中でNULLじゃないポインタは全て解放
こんなんだと、どうせすぐバグ埋め込むよ。
もっと具体的に
118 :
デフォルトの名無しさん:2012/11/22(木) 08:36:37.55
>>109 例外のことを知ったほうがいいよ。
newを行った後に、値を代入するのだから
newが行えなければ、値は代入前の値のままだ。
ありがとう。
宣言時(newより前)に=0してからnew使うようにします。
GCもSTLも使えないアプリケーションでも
ローカルヒープつくって適当なところで一括解放ってやるよね。
細かくメモリ確保・解放するなんて頭良くないとやってらんない。
>>114 どこかでfreeしてて二重にfreeするパターンだな
>>121 >>114 > atexit()の中でNULLじゃないポインタは全て解放
> これでいけるんじゃね?
とあるから、それは無いでしょう。
↓こんな感じで…
BYTE *g_Data = NULL;
void my_end()
{
if(NULL != g_Data){ free(g_Data); g_Data=NULL; }
}
void aaa()
{
g_Data=(BYTE *) malloc(1234);
//処理…
if(bbb()) exit(1); // error end
//処理…
free(g_Data); g_Data = NULL;
}
int main()
{
atexit(my_end);
//処理…
aaa();
//処理…
}
123 :
デフォルトの名無しさん:2012/11/22(木) 14:16:54.24
あのさぁ、フリーするのは目的じゃなくて手段だろ。
mainの最後にまとめて自分で管理しているメモリー
ポインターを解放するとか本末転倒だろ。
ポインター変数をグローバル変数にして云々とか
それってCのランタイムライブラリぃの再実装に過ぎないだろ。
>>114 > atexit()の中でNULLじゃないポインタは全て解放
こういうのって、大抵リンクドリストが使われた場合とか、マルチスレッドの場合とか、
シグナル受けた場合の考慮が抜けててgdgdになる。
全部考慮して書けないことはないけど、そこまでやる価値があるようには思えない。
atexitとfcloseallはヘボプログラマーのために存在する。
標準に従ってるなら、free(NULL)しても何も起きない事は保証されてる。
つまり解放後のNULL埋めを徹底しとけばfreeやdeleteが多過ぎて無問題。
あとatexitだのfcloseallだの使えばとか言ってる奴らは、クラスなり関数なりブロックなりで、なるべく「完結」するよう書けと学ばなかったのか。
構造化プログラミング辺りから学び直した方が良いんじゃないか?
盛り上がっていますね信者としてはうれしいですね
atexit()は、SDLのサンプルにでてくるよ
複雑な相互再帰が絡まず、オブジェクトの寿命が容易に管理できるケースで
関数/ブロックから抜けるときにfreeしない馬鹿はいないだろ
いないよね?
>>108 ほらな、そんな負け惜しみしか言えないだろ?
ゴミは黙ってな
みなさん finally はちゃんと書いていますか?
unwind-protectなら書くよ
134 :
デフォルトの名無しさん:2012/11/23(金) 10:45:30.95
>>131 お前バカだな。かわいそうなくらいバカだ。
> そういう機器だとメモリ確保しないという発言はメモリリークが危険だということを分かってるからだろ?
そういう機器ではプログラムの起動時にメモリ確保して、プログラムが生き続ける限りはfreeする必要が無いからだ。
そもそもmalloc/freeは無い。
バカは黙ってろ。www
135 :
デフォルトの名無しさん:2012/11/23(金) 10:50:49.50
確かにw
俺が前に使った組み込み機器はmallocとか実装されていなくて
スタックも限界あるからローカル変数は小さいものだけ。
あとはグローバル変数を使っていたな。
>>134=135
通じないみたいだな日本語
韓国人か猿だろお前
malloc/newで確保したメモリはいかなる場合もfree/deleteすべきって話が起点なのに、
そもそもmallocが無い環境の話を混ぜ込むとか…
最初から読んでないのか、揚げ足取りたいだけなのか、論点ずらしたいのか知らんがアフォ丸出し。
そもそもスレタイに「mallocの後に」と書いてあるのが読めんのか。
どうでもいいが1レスで済む事を2レスに分割してるやつなんなんだ考えまとめてから書けよ
そもそも
>100
>「そういう機器だとメモリ確保しない」という発言はメモリリークが危険だということを分かってるからだろ?
mallocしない環境もあるのがメモリリークの危険性を示してると>100は主張してるのに
ドヤ顔で「mallocの無い環境もある」とか言っちゃう>134,135…
>>141 > mallocしない環境もあるのがメモリリークの危険性を示してると>100は主張してるのに
これがfree教信者の思考停止というやつだな。
mallocが提供されてない環境はメモリリークの危険性を考えて提供されていないわけじゃない。
かわいそうなくらいのバカ。
>142
「mallocしない」を「mallocが無い」だと勝手に解釈しちゃう奴。
大前提を勝手に外して話の軸をずらしてんじゃねーよ。
144 :
デフォルトの名無しさん:2012/11/24(土) 01:00:42.81
え? mallocしない「環境」だろ?
環境の話してるんだが、
mallocしない方針の話じゃないよ。
145 :
デフォルトの名無しさん:2012/11/24(土) 01:06:39.81
>>143 お前壊滅的にバカだな。吐いたつば飲み込むなよ。
> そういう機器だとメモリ確保しないという発言はメモリリークが危険だということを分かってるからだろ?
「(mallocが提供されてないから)freeしないんで」をリスキーだからメモリ確保しないと決めつけたのはお前。
mallocくらいでバグつくるとビビってるヘッポコはブラウザゲームでも作ってろ。ww
146 :
デフォルトの名無しさん:2012/11/24(土) 01:12:58.67
mallocが提供されているのに、
mallocしない環境って
どういう意味だ?
Mr. malloc
mallocs 胃薬
alloca最強
c99の可変長配列最強
お前ら...スレタイを良く見るんだ...mallocの直後にfreeは不要だろ?
>>151 直後なら流石に「なら確保すんなよカス」だな
>>153 「mallocしてもfreeは不要」なら議論の余地はあるが...「mallocの後にfree不要」だからな...
>151
勝手に「直」を付け足すな。
>151-153
お前らみたいに勝手な解釈する馬鹿が居るからコーディング規約がガチガチになっていくんだぞ。
>>156 malloc()/free() に関するコーディング規則ってよくあるのでしょうか?
win32api は対応する malloc()相当機能 と free()相当機能は同じ関数に存在すべし、感に満ちあふれていますけれども
>>157 どっちかというと、それは「書き忘れないように同じ階層に書いといた方がいいよ」的な
話だね
厳密に守る義務はもちろんないけど、スッキリするんだよね
>>156 char *po;
po = (char *)malloc(sizeof(char) * 128);
free(po);
これをmallocした後にfreeするって言うんじゃないのか?
161 :
デフォルトの名無しさん:2012/11/24(土) 17:35:49.44
>>159みたいに、
現実にはやらないだろうってコードを
想像していたバカって他にもいるの?w
>>160-161 君らが言いたいのは
char *po;
free(po);
po = (char *)malloc(sizeof(char) * 128);
って事だなw
163 :
デフォルトの名無しさん:2012/11/24(土) 17:46:05.81
>>162 俺はそんな事言ってないし、
思ってもいない。
アホすぎて考えつかないそのコードを考えたのはお前だろ。
そこにコードを書いてしまったのが仇となってる。
お前が思いついた証拠だ。
165 :
デフォルトの名無しさん:2012/11/24(土) 18:05:51.48
>>164 スレタイにそっていても
そのコードに意味は無いよ。
だから誰もそんなコードの話はしていない。
ここまでは理解できる?
ていうか、
>>159はmalloc呼び出し自体が無意味で不要だけど
一旦mallocした後のfreeが不要とは言えない
167 :
デフォルトの名無しさん:2012/11/24(土) 18:32:05.67
free無かったら、GUIのピッカーとか、マウスぐちゃぐちゃ動かしてるだけでメモリリークじゃん。
sizeof(char)をわざわざ掛けているところがそもそも間違っている
>>167 不要といってるやつは一瞬で終了するプログラムしか組んだことがない似非プログラマらしい
QZも宿題スレでソート組むとかその程度しかしてないし
基本free必須でかまわないんだが、何事にも例外というものがあるわけだ。
そして例外の基準はケースバイケースで異なってくるわけだが、バカはそれを
理解せず穴だらけの経典を押し付けてくる。挙句のはてにシグナル禁止する羽目になる。
128バイトでヒープから取る必要があるかは知らないけど
スタックオーバーフロー避ける為に
意図的にヒープから割り当てることはあるんじゃ無いの?
>>169 おいおい、QZはfree()信者、すなわち malloc()したもの宜しくプロセス終了時にfree()すべき教の(熱心でない)信者だ。
> シグナルハンドラの中にまでfree() を記述しておく必要はないと思うが、かりにそうするとしても格別困難ではない。
素人発見
もしかしてvolatileのことをいってるの?たしかにあったほうがいいですねえ、これはちょっと失敗か?
>170
普通シグナルみたいな例外的な(環境によって対応してない)ものは、基本則(この場合mallocしたらfreeする)とは
別に言及するべきだと思う。
>>177 mallocしたらfreeするを原則とするなら、シグナルくらいは対応しておけよ。
CPU引っこ抜かれた時にまで対応しろとは言わないからさ。
>>177 まああれだ、
QZ が
>>170のソースにmalloc() があっても free()がない、とけちをつけたのが発端、
というか QZは恥知らずで糠に釘、
というか
>>50=QZ で実は
>>170 も QZ も認識は同じだと思う。
というか 単なる泥仕合
180 :
デフォルトの名無しさん:2012/11/24(土) 23:33:51.72
お前ら一回寝ろwww
スッキリした頭でないといいコードはかけんよ
うふふ、匿名ですものねw
>178
そこまで重要なら、何故malloc/freeみたいにstdlibに入ってないんでしょうねぇ。
184 :
デフォルトの名無しさん:2012/11/25(日) 01:31:53.80
シグナルという機能は
OS依存だからだろ。
C言語はOS依存の機能は搭載しない。
ANSI Cに入ってますけど。
もちろんstdlibには入ってませんが。
プログラマがシグナルを処理しなければならないOSは欠陥OS
まともなOSならプログラマの思考を読み取って適切に対処するはず
仕組みはmallocしたアドレスを自動で判断してfreeするのと同じ
>>176 ちげーよ。教えてやらんけど。お前はシグナル処理をしらない素人。
UNIX系の開発するときは基礎知識のシグナルの説明をもったいぶる素人が登場したわけだが
189 :
デフォルトの名無しさん:2012/11/25(日) 05:26:54.55
>>188 その素人に見下された気分はどうだ? Qz
>>189 シグナルを誤解しているというかsignal()しかしらないみたいだ
192 :
デフォルトの名無しさん:2012/11/25(日) 05:59:02.77
>>191 基本知識らしいから
>>188がもったいぶらずに説明してくれるよ。きっと。
基本知識らしいから誰でも気づくだろうしね。ww
基本知識を知らないQz wwww
>>188 >>172 として考えているんだけれども
>>189 は何を揚げ足とったつもりでいるのだろう?
volatile を忘れていたのはまずいがそれ以外に何があるのかわからない‥‥‥
まあ所詮泥仕合だからいいけど
freeしないより致命的な基礎知識なんだけど。
>>188はもったいぶらずに教えてやれよ。
シグナル云々の話は、Ctrl-Cとかarrestとかゼロ除算で停止した時にも
ちゃんとfreeするようにしてんの?ってことだろ。
197 :
デフォルトの名無しさん:2012/11/25(日) 20:26:13.81
チンカス以外に教えてやれよチンカス
煽ってもでない、そもそもないから
>>188 もったいぶってないでチンカス以外に教えてやれよ。基礎知識なんだろ。
>>200 signal() だろう?
マスクをあらかじめ設定するとかできないし、はいったらマスクしなおす場合もあるし、ほかいろいろめんどうで、
そもそもSystemV/BSD で挙動がかわったりするし、
こいつを使ってどうこうするのは不便というか不可能。
>>203 確保するモジュールと利用するモジュールが異なることなんてざらにあるのに無茶言うな。
制限としては無駄にきつい気もするが、あれだ、win32api 的には合格だ
>>204 確保するモジュールと解放するモジュールについて言ってるのにどうして利用するモジュールが出てきた?頭大丈夫か?
誰が利用してるのか分からないのに勝手に解放できないだろ?
208 :
デフォルトの名無しさん:2012/11/25(日) 23:39:43.61
209 :
デフォルトの名無しさん:2012/11/25(日) 23:41:31.09
>>207 モジュールAがあってそこでメモリを確保する。
モジュールAを使うモジュールBがある。
この時モジュールBは、モジュールにAに対して例えば
OpenHandle()を呼び出す。そしてモジュールAはメモリを確保する
モジュールBは不要になったら、モジュールに対して
CloseHandle()を呼び出す。そしてモジュールAはメモリを解放する。
モジュールAで確保したメモリを、モジュールBで解放してはいけない。
同一翻訳単位内の、同一抽象レベルで行うというのはこういうことなんだが
わからなかったのか?
>>208 え?signal() なんかいまどき使うのですか?普通 sigaction() ではないですか?
211 :
デフォルトの名無しさん:2012/11/26(月) 00:21:48.64
>>210 signal(3)のハンドラでの制限ではないわけだが。
> え?signal() なんかいまどき使うのですか?普通 sigaction() ではないですか?
sigaction(2)を持つOSではsignal(3)はsigaction(2)で実装されてる。
そんな事も知らないで、signalじゃなくてsigaction使ってるオレってプロ。スゲーって自画自賛してるのか。www
シグナル処理を知らない素人。www
わざわざsigactionを実装してくれてるのに低レベルで環境依存のsignalを使えって?
それこそ低脳だ
救いようのないバカだな。
>>200の制限はsignal(3)のハンドラの制限じゃないから。
signalを使うとか関係無いの。
>>209 > モジュールAがあってそこでメモリを確保する。
> モジュールAを使うモジュールBがある。
なんでそんな勝手な条件を入れるんだ。
> わざわざsigactionを実装してくれてるのに低レベルで環境依存のsignalを使えって?
素人丸出し。www
無い知恵絞ってsigactionで書いた、シグナル喰らってもfreeするお経を否定されたのがそんなに悔しいのか?
あのバカげた方法は処理時間が長い検索処理などでは使えないクソ実装。止めたくなったらどうすんだよ。ww
ID無いのを良い事に、レスする相手を間違えてるのを黙って見てたらカオスな事になってきたでござるwww
219 :
デフォルトの名無しさん:2012/11/26(月) 00:57:46.00
>>214 MEM00-C. メモリの割り当てと解放は、同じ翻訳単位内の同一抽象レベルで行う
って書いてあるだろ?
>204,207,214,216
「翻訳単位」の意味をググった方が良いかと。
あと貴方が想定している「問題」はMutexとか参照カウンタとか使うのが一般的な解決策では。
>>220 知ってるよ。
だから、MEM00-Cじゃ根本的な解決になってないと言ってる。
freeをラッピングしてるだけだ。
>>213 >>200 の制限がめんどくさいと思えばいつでもいかようにこっちで振る舞いを指定できるのが sigaction()。
今回、複数のシグナルに対して一つのシグナルハンドラを共用したが、signal() でそれをやるのは大変だ。
>>215 >あのバカげた方法は処理時間が長い検索処理などでは使えないクソ実装。止めたくなったらどうすんだよ。ww
シグナルマスクを解除する瞬間をつくれば、そのときに、保留されていたシグナルにしたがってハンドラに処理が渡るだけでは?
まあ、マスクする時間帯が多少長いけれども
>シグナル喰らってもfreeする
ことはそんなに難しくないことがわかったわけだ、それで十分。
もしかして、なにかを改善する目的じゃなかったりする?
> MEM00-C
>>214は例と条件の違いさえ分からないとんだ池沼だった
>221
1つのソースから、複数のモジュールを生成することはできるでしょ
227 :
デフォルトの名無しさん:2012/11/26(月) 01:24:24.45
>>221 問題ってなんの?
全く関係ないはなししてるだろw
228 :
デフォルトの名無しさん:2012/11/26(月) 01:32:37.68
>>222 >
>>200 の制限がめんどくさいと思えばいつでもいかようにこっちで振る舞いを指定できるのが sigaction()。
バカ。wwww
せっかく>188がもったいぶらずに教えてくれてる煮に猫に小判、豚に真珠、馬の耳に念仏。www
そんなことぐらい自分で判断しやがれ
ここで聞いても答えはでんだろ
他の人の意見を聞くならまだしも
お前が信じるかどうかなんて知ったことじゃねえ
>>228 だ・か・ら、今回は、
> シグナル喰らってもfreeすること
が実際に可能かどうかを検証することにあったわけ、なんか絶対無理みたいな論調でいわれたからね。
シグナルハンドラの書き方の実際は調べればわかるし、非同期に動くからいろいろ気をつけないといけない、特にハンドラを処理したあともとに戻りたければ。
しかし、今回は
> シグナル喰らってもfreeすること
が目的、それさえできれば普通のハンドラの書法に必ずしも沿う必要はない。
>>200 URL・シグナルハンドラ内では非同期安全な関数のみを呼び出すこと。
これはシグナルハンドラを処理中に同じハンドラに再入する可能性があればこその制約、であれば再入させないようにハンドラに入る時点でシグナルをマスクすればいい。
>>200 URL・一般に、標準入出力関数をシグナルハンドラから呼び出すのは安全でない。
ライブラリを使わずに直接ディスクリプタ1, 2 に write() すれば問題ない
>>200 URL・free() 関数もまた非同期安全ではなく、シグナルハンドラから呼び出すことは本ルールに違反するということである。
>>200 URL・free() の呼び出し後に SIGINT が発生した場合、info によって参照されるメモリ領域が2 度解放されてしまうことである。
ハンドラを再入させなければいい。
>>200 URL・volatile として宣言されていない変数をシグナルハンドラが読み取ることである。
メインルーチンでアトミック性を確保するべく適宜シグナルをマスクすればいい。
また、今回はメインからシグナルを受けてシグナルハンドラに移れば、そこにいったっきりでfree()して終わってしまう。
であれば厳密には volatile すら必要ない。
ハンドラの制約には理由がある。それを回避すればいいだけのこと。signal() では困難だが sigaction() ならそれも可能。
>>230 なんか、そのために生きてるって感じがするな君のいってることを実現したコードって
やりたいことは別にあるのに…って感じがするが(よく考えるのはいいことだけどコード
の本懐ではないと聞こえる)
232 :
デフォルトの名無しさん:2012/11/26(月) 10:10:25.63
>
>>200 URL・シグナルハンドラ内では非同期安全な関数のみを呼び出すこと。
> これはシグナルハンドラを処理中に同じハンドラに再入する可能性があればこその制約、であれば再入させないようにハンドラに入る時点でシグナルをマスクすればいい。
バカ。wwww
非同期安全な関数の意味を全く理解できていない。wwww
233 :
デフォルトの名無しさん:2012/11/26(月) 10:16:58.96
シグナルハンドラでは非同期安全な関数しか使えないから「困難」と言ったのに、
シグナル処理すればfree教の教義に背くことなく簡単に出来るというので、
それじゃ作ってみろといって出来たのが
http://codepad.org/mLtuxDOF wwww
処理中のシグナルを禁止するという長い処理の場合に停止不可能な腹絶倒の実装。 www
┏┳━┳━━┳━━┳━━┳━━┳━━┓
┃ ━┫┏┓┃┏┓┃ ━┫┏┓┃┏┓┃
┃┏┓┃┗┛┃┏┓┫ ━┫┏┓┃┃┃┃
┗┛┗┻━━┻┛┗┻━━┻┛┗┻┛┗┛
. ____,
/∧_∧ \
./ <丶`Д´>、`、
/ /\ \つ つ、ヽ
| | ,\ \ ノ | |
ヽヽ し \ \) / /
\ `\_____\' //
ヽ、 ____,, /
┏━━┳━━┓┏┓┏┳━━┳━━┳━━┓
┃┏━┫┏┓┃┃┗┛┃┏┓┃ ┃ ━┫
┃┗┫┃┗┛┃┃┏┓┃┗┛┃┃┃┃ ━┫
┗━┻┻━━┛┗┛┗┻━━┻┻┻┻━━┛
>>232,233
ん、メイン側で無理苦理シグナルをマスクして(でもマスクをはずす瞬間も作っているだけれど‥‥)、というのがお気に召さないのね。
>>231-233 要はシグナルハンドラが重すぎる、ということでいいでしょうか?
ではちょっと考え直します。メインに少々手を加えないといけないのが好みではないのですが、まあ仕方がない。
しばしお待ちを。
>>232 え?リエントラントではない関数は使うな、てことじゃないの?割り込みハンドラと同様の意味合いだとばかりおもっていたんですけれどね。
では「非同期安全な関数」とはどういう意味?
そちらこそわかっていないような気がするなあ‥‥‥。
ハンドラがリエントラントでなければ、メイン側で再入しないように捻じ曲げるのもありだと思ったんですけどね。
>>235 違う。お前はなんというタイトルのスレにレスをしてるんだという話。
シグナルを主題に語るな、malloc, freeを語れ。
シグナルハンドラでfreeとかwriteとか、恐ろしいな。
まあLinuxとかBSDでなら動きそうな気もするが。
>>238 write() は標準入出力相手なら問題ないのでは?
free() はそのままでは確実にアウト、
>>172 は無理苦理に‥‥わかりました、もうやめます。
>>238 いやいやlinuxというかglibcだけど余裕でデッドロック起こして止まるよ。
フラグだけたててメイン処理で見るなりEINTR拾うなりせんといかん。
POSIX完全準拠のシステムならね。
世の中にはPOSIX準拠風のシステムが多い。
244 :
デフォルトの名無しさん:2012/11/27(火) 00:58:15.65
こいつ本物のバカだ。0点。 www
ミスを素直に認めてる分だけ、一部の方々よりマシだと思いますが。
246 :
デフォルトの名無しさん:2012/11/27(火) 21:28:53.15
ミスを認めているどころか、全然ダメだって事に気付かずに勝利宣言してるバカじゃん。
修正前よりダメっぷりが倍増してる。
>>242 そんなに多いかねぇ
writeに関してはLinux Solaris HP-UX AIX OS X(BSD)の
manには記載されているが他にはあるかね?
>>246 どこがどう悪いのか例示出来ないのなら同類。
248 :
デフォルトの名無しさん:2012/11/27(火) 22:57:10.77
クズに教える気はないから。
基本的な事だから、おせっかいな>188みたいのが教えてくれるだろう。
今のいままで具体的な話はなにも。
倍増といわれてもねえ。
fgets() 中の割り込みはキャッチして終わることだけを確認してはいます。
free()か‥‥‥
All Right Now
253 :
デフォルトの名無しさん:2012/11/29(木) 13:49:38.12
スレタイ読んだとき、GCを付けるかどうかの議論スレかと思ったけど、
>>1を読んだら違った。
>>253 GCってタモリが「おにぎり一個でも買えます」とかCMやってるやつか?
むしろゲームキューブの事
張本人のカスは逃げ出したか。
10年以上前のネットニュースのmalloc free論争と
やってる事がほとんど変わらず、おじさんなつかしいよ。
あのころに戻りたい。
結局、freeはいらない派、メモリリークしてもいい派の人なんて議論の中にはいなくて、
オブジェクトの寿命を意識して、それが、プログラムの寿命とほぼ等しかったら、
オブジェクト解体のコストを払うよりも、OSがプロセスの後始末するときに
ついでにやってもらた方がいいだろJKな人がいるだけでしょ。
つまり、freeはオブジェクトの寿命を意識して適切に行え派
(ライブラリ化とか、再利用も考えて総合的なコストが最小になるように
常に考えろ派)
で、それはスレタイの「main以外」という文言から、free必要派の人も
わかってるんでしょ ?
だけど、世の中にはオブジェクトの寿命とか考えずfreeしない
ど低脳も少なからずいるからfreeは絶対必要って言ってかないと
世の中は回らないって思っているんでしょ ?
だったら、freeは必要じゃない場合もあるよ派の人には
愚鈍な人類に今すぐ英知を与えろって言うのがこの議論の
正しい姿なんじゃないかな。
あと、上のほうのsiganalが絡むときの話は
siganalがからむとfreeするのが難しいって話なのかな ?
でも、siganalが絡もうがfreeしなきゃいけないときは
freeしなきゃいけないんじゃないかな。
(なので、このすれのもともとの議論とはずれているよね。
signalの絡むときの安全なfreeの話題も興味あるので
続けてほしいけど。)
>>257 アマチュアの分際でいうのもなんですが、宿題スレでは xmalloc() とかいうラッパをかませて書くようになりました。
/* xmalloc.h */
#if !defined(XMALLOC_H)
struct supernode {
int id;
unsigned int size;
void *data;
struct supernode *next;
struct supernode *before;
};
void xmallocdump(void);
void *xmalloc(unsigned int, int);
void xfree(void *, int);
void *xrealloc(void *, unsigned int, int);
#define XMALLOC_H
#endif
/* end */
ラッパではわざわざIDをつけて malloc() し、free() のときにIDを確認しています。ロジックがおかしいと自覚できることも時々発生するようになりました。
bcc32 -G -vG の存在を知った今でも、やっぱり使っています。
さぼってラッパを使わないでいると、
>>252 のようにすぐにミスります。
>>258 その通り。いるときはいる。
シグナルで設定ファイルを読み直したりする場合にはよくfreeが絡む。
データベースを壊さないようにしたり、一時ファイルを残さないようにするの
にも必要だけど、古くからあるプログラム(svn gitなど)でも一時ファイルが残っ
てしまったり、データベースが壊れることもあった。そのくらいシグナルを正
しく扱うのは難しい。
だから必要のない場合なら無理して実装することはないと思う。
>>260 割り込み処理があることを意識したロジックが書けない無能の叫びだな。
>>261 情報ありがとうございます。
#define ばりばり、のときの使い心地はどうでしょうか?
printf() デバッグですませられるのならすましたいです。
>>256 > siganalがからむとfreeするのが難しいって話なのかな ?
違う。
再利用する可能性がない場合にfreeしなかったら、ド低能がからんできたから、
「そういうお前はどうなんよ。シグナル喰らった時にfreeしてないじゃん」と
からかってやった結末。
>>46 プロセス終わるときに
解放してから終わるのと
放置してバッサリ終わるのでは
速さが違うとかなんとか
>>265 スワップアウトされていたメモリをfree()で開放しようとすると、一旦その部分をスワップインすることになる。
バッサリ終わった場合、フツーのOSであればそんなことにはならないんで、素早く終了できる。
大して保存するデータもないはずなのに妙に終了に時間がかかるアプリと、
同じような規模なのにサクッと終了するアプリがあるのはその辺が効いてるんじゃないかな。
free()不要の「不要」を消極的に考えるからいろいろ議論()になるだけで、プロセスの終了をひとつの機能として
真面目に取り組んで、「速度効率のためfree()しないで終了する」という機能を実装する。
というのがここでいうfree()不要論者が言いたいことだと思う。
267 :
デフォルトの名無しさん:2012/12/02(日) 00:29:36.63
>>266 なにいってんの?
少しぐらいはスワップインするかもしれないけど、
どんなに大量のメモリを確保していたとしても、
freeするのに必要なのは、ポインタと管理データ部分だけじゃん。
HDDだったら1セクタも100セクタもread時間は大して変わらないんだよね。
自前でヒープ確保しmallocもどきを実装して、終了時は一々freeせずヒープごと削除ってのはよくやる。
>>266 素人考えですみませんが、free()での解放もOS(ライブラリ?)によるプロセスリソース解放も、
どちらもスワップアウトされていた一部メモリを一旦スワップインすることになりませんか?
> 大して保存するデータもないはずなのに妙に終了に時間がかかるアプリと、
> 同じような規模なのにサクッと終了するアプリがあるのはその辺が効いてるんじゃないかな。
サクッと終了するのは、ウィンドウが閉じるのが早いだけの体感的なもので、実際はウィンドウが閉じた後は
OS(ライブラリ?)で動く解放処理の分で少しモタつくようになりませんか?
アプリの終了処理でメモリの解放だけ特別扱いして多少早くなったとしても、
コーディングの手間に対して割が合わんな。
ジジイ共。いい加減にスワップイン/スワップアウトっていうのやめろ。
ページイン/ページアウトだ。
>>270 ならない。
通常mallocされたブロック(mallocが返してきたポインタ)の前に管理用の情報が置かれている。(たとえば大きさとか)
freeする場合はこの情報にアクセスする必要がある。
OSがバッサリ解放する際にはこれらの情報にはアクセスする必要が無い。
>>266 しかし、「スワップアウトされた状態での終了の速度」などという恐ろしくどうでもいいことに
こだわってfreeするかしないかコーディングに反映させるプログラマがいたとしたら、
そいつはセンスないだろ。
>>272 終わるときのことばかり考えて答えを出すのは早計、世の中には原則終わってはならない、終わることなく動き
続けなければならないプログラムというものもある
例えば監視系とかね
「必ずfreeすべし」への反論なんだから、freeしない方が良い例を
ひとつでも挙げられたら良いんじゃないの?
>>272 レスありがとうございます。
ということは、malloc()先で呼んでいるメモリアロケータ(?)かどこかにある、
ページイン/ページアウトまでをも司るところが管理しているメモリ情報は、
ページアウトされないところにあるのかな?
>>274 はあ? 終了するプログラムの話をしてるんだが。文脈読めないバカは絡むな。
>>275 その、必ずfreeしなけりゃならない理由(教義)が薄弱なんだよ。
異常系はどうすんのよとか突っ込むとQzのようなオロカなハメに陥る。
捕捉不可能なシグナルというのが存在するので「必ずfreeする」は不可能でしょ。
>>277 異常系のfree() は QZ もあきらめていたんですけど?
問題は正常系の free() じゃなかった?
abort()で終われば問題なし? バカげた教義だな。
「信者」扱いだし
>>272 じじーだってことがよくわかったな^^。ページって言った方が >267 もイメージしやすそうだな。
>>267 ページングの単位って4kbyteとかなんだよ。
ページングの単位より小さい単位でばかりmalloc()していた場合、
ページアウトしていたほとんどすべてがページインされることになるわけだ。
で、これだけじゃなくページアウトされるような状況なわけだから、
free()のためだけにしか意味を持たない領域がページインされることで、
ほかのアプリが使っていたメモリがページアウトされるんだな。
その後、ほかのアプリを使おうとするとそのページアウトされていたメモリが、
ページインしてくる。その間ユーザは重い思いをするんだ。
>>270,276
プロセスのメモリ空間としてのアドレスと、物理アドレスが別物なのは知っていると思うけれど、
それを結び付けているテーブルと、外部記憶ではどこを使っているという情報を破棄するだけで、
実体のメモリや外部記憶の中身を触ることはないんだ。
(セキュリティの観点から外部記憶のデータを塗りつぶすということもあるけれど、それは別の話)
この情報はCPU/MMUが参照するから、アプリが使うメモリとは別管理。
>サクッと…
メモリ少ない環境で Lotus Notes 使ってみると体感できるよ^^、きっと。
>>273 うむ。フツーはビジネスロジック上で、malloc()/free()なんて現れないはな。
こういうことを理解したうえでアプリの特性によって malloc()/free() をどう使うかを考えることなく、
必ずfree()っていうのが、思考停止って言われるゆえんじゃないかと思う。
ところで必ず free() っていうのはWin32以前からの古いWindowsプログラマと、
その末裔にその傾向が強いんだよね。GlobalAlloc()で痛い目に合ったのかな?
>>281 細かなmalloc領域がキューで大量に繋がってたりしたら最悪なんだよね。
一々追いかけながらfreeするの面倒すぎる。
283 :
276:2012/12/02(日) 13:10:30.21
>>281 > この情報はCPU/MMUが参照するから、アプリが使うメモリとは別管理。
なるほど。
その領域はページアウトされないから、パフォーマンスに影響しないということですか。
ありがとうございます。
>メモリ少ない環境で Lotus Notes 使ってみると体感できるよ^^、きっと。
^^;;
POSIXなmalloc/freeの話なのに、特定のOSの実装を語るキチガイがいる。
ページテーブルエントリを木構造で管理して例外でTLBに食わせるとか
普通にどのOSでもやってんじゃないの?
MS-DOSとかITRONとかの人?
もう
>>50 でいいんじゃないの?信者も自分で信者といってるくらいだし
>>283 ページテーブル自身もページングの対象だ。
x64だとページテーブルで0.5%くらいのオーバーヘッドがある。
4Gバイトの空間を管理するために20Mバイト。400Gバイトなら2Gバイト
こんなのに居座られたくない。
>ページテーブル自身もページングの対象だ。
これ本当?
ページテーブル領域はページアウトされないようロックしておくものだと思ってたのだが。
METAな議論はfj時代にもう飽きた。現実的な話をしたいんだ。
>>283 単純に言えばそれに近い(
>>288 参照)と思うけど、もうちょっと書くと。
その部分の処理はfree()しようがしまいが必須の処理で必ずOSがやることなのさ。
もし、それでパフォーマンスに影響が出るとしても必須のことだから仕方がない。
時間が解決してくれて、それが原因で落ちたりすることはないけど、CPUクロックだってリソース、
最終的に使うユーザの時間は大事なリソースなんだから、いらん処理で時間というリソースを
ダダ漏れさせていいわけない。いらん処理をすると消費電力(モバイル系だと超重要)も増えるしさ。
せっかくアプリが楽できるようにがんばっているのになんで任せてくれないの?
と日頃悲しい思いをしている環境依存部分の下層レイアを書くことが多い、じじいのぐち。
>>289 (表現が不正確かもしれんが)OSのテーブルの話じゃなくて、ユーザレベルのテーブルの話じゃないかな?
>>284 経験者のようだな^^
292 :
デフォルトの名無しさん:2012/12/02(日) 16:43:09.97
>>291 それハードウェアの話じゃんw
じゃなくてOSが管理してるメモリの話。
メモリ管理領域は、スワップ対象外メモリとして
OSから確保するでしょ。
293 :
289:2012/12/02(日) 17:00:35.04
>>291 なるほど、PDは常に存在するとして、その先のPTはアロケーションしたときだけ生成されるのね。
少し賢くなったw
ただそれでも、割り込み禁止状態等でもPTEまではアクセスできるよう、領域ロックはしたほうがよさげ。
リンクドリスト・ツリー構造のようなものを解放する場合、ヒープにアドレスが
記憶されるわけで、もしそこがページアウトされていた場合には一度ページイン
してアドレス獲得しないといけないかもね。
処理系に依存
#じじいおおすぎー;-b
だから今のOSのメモリ管理方式はほとんど同じなんだって。
ページ管理のツリー段数とページサイズが違うくらいで。
だから、mallocの実装とOSのそれは違うだろって
mallocの実装ってアンタ・・・
OSから受け取ったメモリブロックを切り分けてるだけだが。
>>277 いやw
動き続ける中で何度も使用される機能なんて当たり前だがあるわけで、その中で
動的にやりくりすることもありますから勝手に終了をプログラム全体が終了する
ケースに限定しないで欲しいのだが
>>299 うっせ、カス。
プログラムが終わるときの話をしてるのに割り込んできて終わる話に限定するなとか、バカぬかすな。
お前、リアルでも空気読めないとかいわれてハブられてるだろ。
そんなシビアにメモリ管理しなくちゃいけないハードで組んだことないから、このスレ読むの楽しい。
Free不要なんて考えしたことなかったわ。
明確な目的や制限を理由にfreeしないのを「free不要」と表現するから軋轢が起こるのだと思う。
原則必要として、但し書きでfree省略が許される/省略すべきと言った方が理解されやすい。
つーわけでfree不要と言い切るような奴とはやはり一緒に仕事したくないな。
304 :
デフォルトの名無しさん:2012/12/03(月) 00:42:33.02
終了時にメモリ解放しないというのならさ、
普通に終了しないで、exitでもすればいいじゃん。
強制終了すればメモリ解放しないで終われるよ。
えっ
その「原則」が人によって違うのに、信者が自分の「原則」を布教しようと必死になるからカオスになる。
>>304 C++が絡むとexitもややこしいんだよね。
staticクラスのデストラクタはatexitに依存している事が多いので
exit(): staticデストラクタ=動く スタック上のデストラクタ=動かない
_exit(): staticデストラクタ=動かない スタック上のデストラクタ=動かない
リモートにセッションを持っていたりすると時々ややこしい事が起こる。
>>301 スレタイ見てその話をしてるんならばかってだけだなお前が
309 :
デフォルトの名無しさん:2012/12/03(月) 02:14:39.71
>>308 話の流れの読めないバカって本当に存在するんだな。お前退場。
二時に言い争いwww
311 :
デフォルトの名無しさん:2012/12/03(月) 07:44:12.39
>>309 ケースを限定してこうだろっての展開しても結論は出ない
これまでもそうだし、これからもそう
>>312 お前が議論に必要な知能をもっていないバカだという事は良くわかったから、これ以上絡むな。
>>274で見破っておくべきだったと反省。
>>313 なんで俺が274なわけ?
見境なく噛みつくなよ
>>314 >>274じゃないと言い逃れするんだな。
>>274は的外れだがテクニカルな議論を吹っかけてのでバカはバカだか救いようがある。
それ以降に参入したというならレスつける価値もない基地外。あ−、損した。
316 :
デフォルトの名無しさん:2012/12/03(月) 21:48:52.30
あらら…
せっかく気持ちよく帰ってもえらえるところだったのに戻ってきちゃうじゃん
318 :
デフォルトの名無しさん:2012/12/03(月) 22:01:26.04
では、気持ち悪く帰っていただきましょうw
ずいぶん交戦的なタイプだね
まぁいいけど
>>302 例えば組み込み系だといきなり電源を落とされる運用なんかもあるから、通常は存在する「終了の手続き」そのものが
発生しないなんてなこともあるから、その意味ではfree書かないこともあるよ
まぁ、この手の話は正確には書かないというか書いても通らないのだけれどね
普通にソフトだけ再起動ってなパターンもあるから、粗油ときは当たり前にここでの議論の対象になっちゃうけど
>>274みたいな終了しないソフトのほうが
オブジェクトの寿命 = プロセスの寿命
なオブジェクトのfreeが必要ではない
(というか開放できない。プロセスの寿命 = ∞なので)
と思うのだが
たとえば、ファイルを開いたり閉じたりするだろう。
ファイルを開いたらあたらしいオブジェクトをつくる。
ファイルを閉じたらそのオブジェクトもいらなくなる。
324 :
デフォルトの名無しさん:2012/12/05(水) 08:36:35.78
>>322 323のいうように、動いてる中で動的に取る、解放する、なんてなものがあるね
あなたのいうものは基本は静的に取ってるエリアの話だね
>>324 んー、こんどはどこがバグってますか?やりたいことは、^C, ^Z kill 引数なし、とかを無視することなんですが。
10万モリタポでぜひお願いします。
なお、free()教の教祖ではなくて一信者なんですけど。
異常系はfreeしなくてOKとか、信者の分際で勝手に教義を変えたらだめだろ。
基地外宗教を他人に押し付けるような基地外信者は信者は盲目的に教義に従ってすべてのメモリをfreeしろよ。
オレならSIGKILLでも捕まえてfree出来るぞ。www
意味ないからやらないけど。
>>327 おお〜、ぜひ教えてください、10万モリタポで
SIGINT, SIGQUIT, SIGTERM, SIGTSTP 対応でお願いいたします、sigkill はどうでもいいから
バグなら10万モリタポで教えてやるよ。お前が考えたプロトコルで支払え。
ただし、お前が考えたプロトコルなんだから、だまし取られても泣くなよ。www
330 :
322:2012/12/06(木) 00:17:03.82
>>325 うん、そう。静的な領域。
とりあえず、プロセスがまだまだ生き続けるのに
オブジェクトが解放できる場合は絶対freeしなくては
ならないと思う。
なので、freeが必要か否かは時と場合によると考える。
じぶんの同僚は
「時と場合にとるなんてのはもっとも役に立たない言葉だ !!」
というけれど。
静的な領域を使って終了するプログラムと
static char buf[1024 * 1024];
int main()
{
// buf使った処理
return 0;
}
動的な領域を使って終了するプログラムがあっても
static char *buf;
int main()
{
buf = malloc(1024 * 1024);
// buf使った処理
return 0;
}
プロセスとしては配置されるアドレスが違うだけで意味としては変わらないよね。
前者にはbssの非ページ領域が割り当てられて、
後者はbrkで延長されたプロセスの非ページ領域(libcヒープ内)が割り当てられる。
>>330 > とりあえず、プロセスがまだまだ生き続けるのに
> オブジェクトが解放できる場合は絶対freeしなくては
> ならないと思う。
> なので、freeが必要か否かは時と場合によると考える。
たった4行なのに矛盾してる。
全然矛盾していないだろ
上3行が具体的な例で、下1行が一般化したもの
freeしなくても良い場合の具体的な例が示されていないだけ
絶対って意味知らないの? 例外あったら絶対じゃないの。日本語わかる?
これがアスペというやつか
仕様書も行間読んでプログラムつくるのか。w
ダメな奴の典型。
プロセスが生き続けている間は解放できないオブジェクトについてはfreeしない
>>330と全く矛盾しない
なんだ、中学数学の論理学も満足に理解できてないバカか。
で、結局キミのいう「絶対」は例外あるのかい? w
条件付きの命題を理解できない馬鹿か...
絶対に例外はあるよ。
例外のある絶対。 wwww
んじゃ、その例外を列挙しろよ。
絶対に対して存在する例外が絶対の例外です。
ある条件を満たす場合に絶対成り立つからといって、
その条件の外でまで成り立つわけではない
>>341 では、まず絶対を提示してください。
さすれば私目が例外をお目にかけましょう。
>>343 これがアスペというやつか。www
「プロセスが生き続けている間」という条件下でキミのいう
「絶対」は例外あるのかい?
とりあえず、
>>332みたいな馬鹿と一緒に仕事したら
絶対苦労すると思う。
なので、仕事で苦労するかどうかは時と場合によると考える。
>>345 条件には「オブジェクトが解放できる場合」までが含まれる
行間読まないといけない仕様書書くバカとは仕事はしたくないな。
で、キミのいう「絶対」は例外あるのかい? ww
>>347 ああ、その条件でいいよ。例外はあるのかい?
あるのかないのかはっきりしろよ。自信ないのか? www
「例外」という書き方をしてる時点で
全く理解できてないことが分かる
つまりね、馬鹿にも分かるように書いてあげると、
「ある条件で絶対成り立つ命題があります、でも例外があります」と言ってる訳じゃなくて
「ある条件で絶対成り立つ命題があります、でも条件外では成り立ちません」と言っているわけだが、
あまりに低能すぎて理解できないんだろうなぁ
条件は「プロセスがまだまだ生き続けるのにオブジェクトが解放できる場合」
で、命題は「絶対freeしなくてはならない」
で良いんだな。最後の訂正チャンスをやるが、訂正するか?
freeを呼んでstack overflowでもして学校で噂とかされると恥ずかしいし///
俺は絶対正しい!!!
例外として俺が間違っている場合を除く。
その命題が正しいかはともかく、それが
「なので、freeが必要か否かは時と場合による」と矛盾しないことについては
全く問題ないよ
だってその命題は「プロセスがまだまだ生き続けるのにオブジェクトが解放できない場合」
についてはfreeが必要とも不要とも言ってないからな
プロセスの寿命 = オブジェクトの寿命のケースは既出
>>359 はあ? バカか。
> だってその命題は「プロセスがまだまだ生き続けるのにオブジェクトが解放できない場合」
> についてはfreeが必要とも不要とも言ってないからな
解放できないオブジェクトはfreeしちゃいけないの。あたりまえ。
オブジェクトは解放出来るオブジェクトか解放できないオブジェクトの二種類で、
「解放出来るオブジェクトは絶対にfreeしろ」という命題を真とするならば、
「なので、freeが必要か否かは時と場合による」は矛盾する。
プロセスが終了する場合の話はすでに完了している。
>>274が無理やり割り込んで切り替えた。
363 :
デフォルトの名無しさん:2012/12/06(木) 23:40:36.95
freeをしないのはウンコを流さないのと一緒。
そもそもmallocしなければfreeなど必要ない
確保できるかどうかすら分からない領域を必要とする時点で設計不良
もう時代も変わってきたし、この板もID出してもいいのかもな
議論するには不向きだな、やっぱ
366 :
デフォルトの名無しさん:2012/12/07(金) 00:38:34.44
>>364 C++を知らない組み込みプログラマーは死ねばいいと思いませんか?
議論じゃなく顔真っ赤なお子様同士のつまらない口げんかだろ。
ID出したところで変わらん罠。むしろもっと増える。
>>366 C++ならインスタンスの動的生成が必須とか信じてるの?ウマシカなの?
プロセスの寿命が長ければ長いほどfree()しなくて済むように考えるなー。
全部静的で良いとか、実際にプログラム組んだことの無いやつだけだろ。
>>370 未だに20年前のCコンパイラしか使ったことのない組み込みプログラマーもな。
自分の世界の以外の価値を認められない狂信者。
異端は殲滅すべし。
自分の作業環境が世界の標準と思ってる奴も痛いな
>>368 標準ライブラリと多態を使わなければ可能だけど現実的じゃないよね。
printfでも内部的にmallocが使われる。
375 :
デフォルトの名無しさん:2012/12/08(土) 18:24:47.61
(*´・∀・)(・∀・`*)ヘー
>>374 printfの実装にmallocが必要とは思えないなあ。
キミにもこの言葉を進呈しよう。
>>373 > 自分の作業環境が世界の標準と思ってる奴も痛いな
>>376 > printfの実装にmallocが必要とは思えないなあ。
printfの仕様もロクに知らないようだな。
そもそも、ちょっとソースコードをググれば分かることだろうが。
>>376 ソースも見ないで言ってんの?
glibc-2.16.0: vfprintf.cにmalloc
newlib-1.20.0: vfprintf.cに_malloc_r
自分の作業環境で何が起こるくらいは知っておいた方がいいんじゃない?
実装はまぁいろいろあるわな
可変個引数やら可変長出力なんてなものをスレッドセーフに作るなら
用途にもよるんだろうが当たり前のように使われてると思う
深く考えて実装したくないから
>>380 > 可変個引数
> 可変長出力
> スレッドセーフ
奴にはそのレベルの話題は無理w
382 :
デフォルトの名無しさん:2012/12/09(日) 08:42:22.41
printf自体に可変個引数の処理があるんじゃなく、
C言語自体の引数の渡し方にフォーマット処理が含まれてるだけにしか思えないのだけど…。
scanfの方だったら、引数の数で本当に挙動が変わってるけど。
384 :
デフォルトの名無しさん:2012/12/09(日) 16:09:16.94
>>383 libcの実装がそうなってるってだけ。
malloc使わなくてもprintfは実装できる証拠を出したのに、標準ライブラリは使ってるとか…
限度を超えた頭の悪さだな。
>>385 そうじゃなくて、大概のライブラリにmallocが入っているのに
どうやって全部静的にプログラミングするのかと。
libstandも他の部分にはmallocは入ってるぞ?
387 :
デフォルトの名無しさん:2012/12/09(日) 18:02:38.50
アセンブラレベルで考えたら、スタック操作とシステムコールだけでコンソール表示はできるけど、
世界標準のC言語の環境がどうかという話だから、mallocが無いという発言はちょっと。
malloc相当無しでprintfねぇ
出力を複数回に分けてもいいならともかく、一発で送るには必要
alloca は「malloc相当」ですか?
スタックポインタの巻き戻しもfreeのうちだよね
freeいらない派はそれすらいらないって言ってるんでしょ?
関数callしても元のアドレスに戻れなすぎワロタ
sbrk戻してOSに返すのもfreeのうちだよね。free教信者は返してるの?
>>391 せめてアセンブラくらいは読めるようになってから議論に参加しよう。
>>393の作ったC言語は関数から戻るときにSP足したりするマシン語吐かないんだ?
おかしな人
freeのうちとか範囲広げすぎるバカってなんなの
397 :
デフォルトの名無しさん:2012/12/10(月) 00:29:53.36
使ったメモリ返さないとはそういうことだろ
覚悟決めろよ
398 :
デフォルトの名無しさん:2012/12/10(月) 01:25:23.25
スタックはメモリを返すとか返さないとかの問題じゃない。
確保し続けるなら、stack overflow とかおこさないだろ。
そのうち、プログラムカウンタも更新するなとか言い出しそうだな。
>>394 SP足したら、free呼ばれるようなアーキテクチャ使ってるの?
もしかして関数呼び出すときには、mallocでスタック確保するわけ?
このスレって、間違った知識がある奴に限ってやたら自信満々だし、すぐ人を嘲笑するな。
データスタックとコードスタックを分離して実装すれば、
データスタックを巻き戻さずに関数からの復帰が可能。
スタックを使わずにサブルーチンコールができるCPUなら
スタックを巻き戻さずに関数からの復帰が可能。
403 :
デフォルトの名無しさん:2012/12/10(月) 11:26:38.13
アドレスをデクリメントしてメモリの内容をレジスタに復帰させるだけの処理を省く利点って何?
メモリアクセスを減らせる。
405 :
デフォルトの名無しさん:2012/12/10(月) 18:43:15.42
セグメントフォルトするからfree使うなというわけの分からない案件ならあった
おまえら、生きてて楽しい?
407 :
デフォルトの名無しさん:2012/12/11(火) 01:20:37.45
408 :
デフォルトの名無しさん:2012/12/18(火) 00:55:05.21
コンパイラ次第。
相当軽量な、組み込みとかいう特殊なものでなければメモリリークしない。
それにサブ関数で確保してグローバルでもメモリ使いたい時もある。
free必須ではない。
コンパイラ依存なのか
知らなかったよ
違うだろ。
実行環境依存と言いたいのだろうが、それをコンパイラ依存と言っちゃうところがなんともアレな人だな。
412 :
デフォルトの名無しさん:2012/12/20(木) 23:36:22.97
風邪なおんねぇ・・
freeいらない派は次の規格でCの標準ライブラリからfree削除頼む
そこでベームGCですよ、と
416 :
デフォルトの名無しさん:2012/12/30(日) 01:05:39.52
>>413 誰もそんなことは言っていないぞ。バカ。
>>416お前バカか?
言ってるだろOSが回収するからfreeいらないって
池沼は引きこもってオナニーしてろよ
てかfreeないC環境既にあるじゃん
その場合mallocもないけど
419 :
デフォルトの名無しさん:2012/12/30(日) 08:12:49.48
>>417 OSが回収するから終了前はfreeが不要と言っている。
全ての場合に不要なんて誰も言っていないぞ。死ねよバカ
まあそんな移植性も考えていないようなソース、
レビューで全部はじくけどな
おまえ自身がはじかれないように気を付けろよw
いや多分もうはじかれてると思うw
OSが回収とか、BSDとかLinuxくらいしか触ったことないんだろうな。
>>420 > レビューで全部はじくけどな
絶対はじいてないってw
そもそもレビューできる実力ないだろ。
424 :
デフォルトの名無しさん:2012/12/30(日) 10:18:36.14
ANSI C host environmentで移植性はある。
それ以外のfree standingならば案件毎に異なるから移植性は重要ではない。
こんなことも知らないバカがレビューやってるって、どんなクソ集団だよ。
↓おそらくこういう奴を飼っている集団。 ww
「どんな環境でも動作するように、移植性考慮して、signalくらってもfreeする
ように実装してみました。作業工数10割増しです。そしてバグだらけです。」
移植性を持ち出されると苦しいらしいwww
レビューなら、
「あれ?こっちの分岐でxxのfree()忘れてない?」
「あぁ、それが成立する条件だと、関数を抜けた後すぐにプログラム終了ですから不要です。」
なんて言っても、問題の有無が判断しにくいという理由でバツだろーな。
実際の動作には問題がなかったとしても。
>>427 実際にレビューで指摘すると
「うーん、レアケースだからfreeいらないか」
ってなると思う。
429 :
デフォルトの名無しさん:2012/12/30(日) 10:50:56.29
>>427 得意の論点ずらし。
移植性が悪いからレビューではじくという最初の主張はどこに行ったんだよ。
いや、バカだから最初の主張はすでに忘れたのか。w
>>428 free()追加して済むならそれでおしまいでしょ。無理にわざわざ怪しいコード
残しておく理由もないし。
>>429 どこ行ったもなにも、別人だし。アタマ冷やせよ。
431 :
デフォルトの名無しさん:2012/12/30(日) 11:43:56.76
>>430 > どこ行ったもなにも、別人だし。アタマ冷やせよ。
んじゃ、そういう事にしといてやるよ。w
>>420はレビューアの資格ない素人のタワゴトって事でいいね。
横から論点ずらす突込み入れるときは紛らわしくならないように気を付けろ。
何一人相撲してるの? (w
>>430 レビューできる実力もないのに無理するな。
434 :
デフォルトの名無しさん:2012/12/31(月) 09:46:30.22
お前らほんと屑だなあ
世に存在するほぼすべてのソフトウェアは残念なことに賞味期限が設定できない
したがって作った人間が半年程度で放棄する想定でも
実際には10年以上にわたって保守され続けてしまうということが多々ある
ならば
サイショハ コウイウ ツモリ ダッタンダ
などというつまらない言い訳を吐かなくてもいいように対処しておくのが
人間の知恵というものである
>>435 >世に存在するほぼすべてのソフトウェアは残念なことに賞味期限が設定できない
試用版とか普通にあるじゃん。
>>436 お前プログラマじゃないか、ネタでレスつけてるんだろ
お兄さん釣針につられちゃったぞー
何を言ってるのかさっぱり理解できない。
まあ、理解する必要もなさそうだけど (w
自分が理解できない事象はすべてカオスということにしておきたいお年頃
具体的な反論ないところ見ると、本人も理解できてないんだろうな
って言うかただの煽りだろ
>>435 に「オーバーエンデュランス」とかもっともらしい名前つけて
不安を煽れば商売になりそう
ところで、プログラム終了時にmallocがされた領域を
OSに確実に返すのでfreeが必要ないのはFrreBSDやLinuxだからだ、
移植性を考えるなら、プログラム終了時もfree汁!!という人はどういう
環境を想定しているのでしょうか ?
組み込みOSならそもそもプログラムの終了というものがないから
プログラム終了時のfreeの必要性は関係ないよね。
そうでないプロセスの起動と終了の概念のあるOSでプロセス終了時
malllocされた領域を明示的にfreeする必要のある環境なんてあるのだろうか ?
プロセスという概念のある環境でプロセスで確保したリソースを
プロセス終了で返却しないってのはもうほとんどバグに近い振る舞いじゃない ?
(他のプロセスとの共有リソースとかは除く)
#define free(p)
で解決
ドライバとかどうなんだろうね
446 :
デフォルトの名無しさん:2013/01/15(火) 14:38:17.12
バグに近いとかじゃなくて、バグ
freeしなくて良いとか言ってる奴って技術以前に精神的に問題ある奴だと思うよ
常に手抜きの言い訳を考えてるような
>>443 想定するのもいいけど、如何なる環境でも問題ない(減らす)選択という意味で考えても良いと思う
例えば、組み込み系だとすでに入手ができない状態でリプレースとかあったりして
もちろん、開放しても実質してくんないなんて環境なら電源落とせって手順でクリアするしかないわな
>>446 屁理屈つけてウィンカーを出し渋る馬鹿ドライバーと同じだな。
まともな奴なら、malloc→freeなんざ身体で覚えてるからな。
449 :
デフォルトの名無しさん:2013/01/15(火) 14:59:22.84
どんな原則にも例外は存在するのだが、それを理解できないバカが「いかなる
場合でも必ずfreeしろ」と言い出すから混乱する。
そのバカの典型がQzとかいうクズ。それほどいうなら異常系もfreeしろと
からかってやったら、バグだらけのシグナル処理書いてバカ晒してて笑った。
allocaの話じゃないのか
>>449 signal処理程度を例外に該当すると思ってしまうのはよほどのバカだな。
こんなの準正常系だろ。
signalが正常系じゃないなら組込みは成り立たんわw
アプリケーションレベル(ビジネスロジックとかいうのか)で素のmalloc(), free()なんて
呼んでいる時点で終わっているからどーでもよかろう
>>454 ドライバは、終了してもOSがfreeしてくれない場合もあるということかな
456 :
443:2013/01/16(水) 23:38:20.37
>>447 自分の読み返してみたら何書いてるかわかんないね。
ひとりよがりですまん。
とりあえず、想定しているのは、例えば数値計算やコンパイラなんかで
プロセススタート時にファイルから読み出されたデータから
連立方程式を作成したり構文木を作成したりで、
それを、プロセス終了時まで使い続け、プロセスの終了とほぼ同時に
開放する(しない)というものを考えています。
自分は数値計算で計算機の物理メモリと同じスケールのメモリを
プロセスの起動時に確保して、終了まで使い続けるというものを書いていました。
こういうのならまだいいんですが、コンパイラなんかだと、
何万もある細かい有向グラフオブジェクト、それが、循環してたりしてってのが
あるらしいですね。それをプロセスの終了時にちまちまfreeしていくのは
どんだけ無駄なんだろうってのが昔のネットニュースで話題になってました。
個人的に、プロセス終了時のfreeはバーベキューなんかで
使い捨ての紙皿を一枚一枚きれいにしてから捨ててるみたいに感じる。
(使い捨ての)テーブルクロスごとゴミ袋に放り込んでしまえと思う。
457 :
443:2013/01/17(木) 00:02:34.94
で、組み込みOSを挙げたのは、
こういう議論をすると、組み込みOSに移植したとき、
組み込みOSだとプロセスの終了時にfreeされていない領域は
OSに返却されないことも考えられるから、移植性を考えると
プロセス終了時にもfree必要という話が出てくるけど、
組み込みLinux(きちんとメモリが回収される)
よりもっと小さなOSが使われる領域だとそもそも、プロセスの
終了ってものをほとんど行わないから、exit前のfreeって議論から
まずはずれるというので話しにあげました。
>>457 > 組み込みLinux(きちんとメモリが回収される)
> よりもっと小さなOSが使われる領域だとそもそも、プロセスの
> 終了ってものをほとんど行わないから
ワザワザ「無いことの証明」の手間を自分に課している新手のギャグですか?
プロセスの概念がないOSにプロセスを移植するときに、
プロセスの終了と開始を、動かし続けることで再現することが多いのですが、
プロセス終了するからfreeしなくていいかwっていう腐った実装をされている場合、
そもそもちょっと手を入れたくらいでは解放できるように作られていなかったり
してとても迷惑なのです。
OSSとかならまあ泣いて作業しますが、自分ところで発注したプログラムだったり
すると、そんな腐った実装をした会社は取引禁止になります。
>>455 ドライバってそもそもOSの通常の管理から外れたことを特別にやらせるための機構だからなあ、あり得るかも
性的配列でもつこうてろ
性的配列いいなーいいな
性的配列にでもつっこんでろ!
つっこみすぎたらsegmentation faultしました
#include <stdlib.h>
extern updown(double erolv);
extern insert(char *yomenonamae);
extern shasei(float angle);
typedef struct {
int (*insert)(char*);
int (*shasei)(int);
int (*onanie)(double);
int (*masturbation)(double);
} __attribute__((packed)) Chinko;
int main(int chinko, char **manko){
Chinko *mypenis;
#define HOKEI NULL
mypenis = malloc(sizeof(Chinko));
if (mypenis == HOKEI) return 0721;
mypenis->masturbation = mypenis->onanie = updown;
while(mypenis->onanie(4.545) > mypenis->insert("まいんちゃん")) {
mypenis->masturbation(0721);
}
return mypenis->shasei(mypenis->masturbation(0721)),free(mypenis),(int)main;
}
467 :
デフォルトの名無しさん:2013/01/17(木) 11:15:20.84
>>459 つまり、発注条件と違う環境に盗用しようとして逆切れしてるわけだね。
468 :
デフォルトの名無しさん:2013/01/17(木) 12:10:57.82
fjで10年以上前に似たような話を延々やっていたなー
前提を勝手に変えておかしな話を展開するあたりも同じだなー
ここまで俺の自演
いや俺だ
おまえか
static char *p = NULL;
if (NULL != p)
p = (char *)malloc(BUFSIZ);
的な書き方をすれば、malloc, freeを減らせるってヤツ?
mallocしなけりゃfreeしなくて良いといいたいのか? なら何も書くな。
if (p != NULL)
じゃなきゃヤダ
if (!p)じゃなきゃヤダ
477 :
デフォルトの名無しさん:2013/01/17(木) 19:41:35.35
バカが食いついてきた。
>476
笑ってもいいかな
,一-、
/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < いいとも!
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У... |
#define NULL ((void *)0)
C FAQ
5.5:
ヌルポインターの内部表現に0でないビットパターンを使っているマシンでは、NULLはどう定義するべきかか。
A: (省略されました)
484 :
457:2013/01/18(金) 01:57:41.80
>>458 適当なことかいてすまん。
>>459 とりあえず、freeというのはある程度時間を消費する処理であることは
よろしいでしょうか ?
特に細かいmallocを繰り返していた場合。
266辺りの議論を参照。
なので、exitの直前にfreeをごりごり繰り返すのはリソースの浪費。
さて、
>>459はUNIXやWindows等、プロセスが確保したリソースを
OSがよきに計らってくれる環境で動作することを要求されたプログラムが
プロセスの概念すらないにOS上に移植できないとおっしゃられているのですね。
それは、仕様の不備ではないでしょうか ?
最低でもxxxxというOS上に移植することを考慮すること、と記述すべき
ではないでしょうか ?
485 :
457:2013/01/18(金) 02:50:31.53
>>468 このスレのタイトルに「main以外」と入っているので、
プロセス終了直前のfreeは必ずしも必要ではないというのは
>>1さんも同意していると思う。
これは10年前からの進歩だと思う。
プロセス終了前のfreeは、
>>1では「例外中の例外」と
考えられているみたいだけれど、それは、結構多いシチュエーション
だと思う。
自分は、教条主義的にmallocした領域は絶対にfreeしなくてはならないという
固執した考えを治してあげたいと思う。
で、free絶対派の根拠として、組み込みOSなんかはfreeしないとOSがメモリ
回収してくれないものもあるっていうのがあるけど、それが絶対にfreeしなければ
ならないことの根拠にはならないことを示したいと思う。
(もちろん、組み込みOSを考慮した方がいい場合もあると思うけれど、
そうでない場合も多い)
UNIXやWindowsなど、プロセスが終了するとリソースをOSが回収する
OSだとmalloc-freeはsbrkやmmapでOSから取得したメモリを切り分けている
ヒープ管理ライブラリに過ぎないわけで、それが、ある一定の要件を
満たしていることをプログラムの動作用件として要求するのは、妥当だと
思う。
なので、常に組み込みOS等を考慮しなければならないというのは
妥当ではないと思う。
いいから、mallocって書いたら、すぐに対になるfreeを書け。
屁理屈言ってないで体で覚えろ。
俺はC++でRAIIするけど
p = malloc(123);
free(p);
strcpy(p, "123");
>>484 #define quick_free(p)
>487やると落ちるOSとちゃんと動くOSがあるんだよな。
昔のreallocはその動作を前提にした仕様なんだっけか?
どっちにしても、strcpyが内部でmalloc使う実装だったり
マルチスレッドだったりしたら「ちゃんと」動くとは限らんな。
strcpyが内部でmalloc?
ありうるのか?
>>489 × ちゃんと動くOSがあるんだよな。
○ たまたま動いているように見える環境があるんだよな。
ただの仮定の話じゃないの?
ありそうもない仮定だけど
>>484 終了前のfreeの実行コストなんていう恐ろしくどうでもいいことのために
それを特別扱いするのはプログラミングコストの無駄だと思うがな。
そもそも、実行時のコストを棚に上げて終了時のコストのみ重要視
しなきゃならん例ってのが思いつかん。
どうでもよくはないよ
大物アプリの終了時に無駄に時間がかかることがしばしばある
後始末、解放処理のためにページインが発生しているんだろうが
もう要らないものを時間かけて読み込んですぐ捨てているわけで、馬鹿馬鹿しい限り
でもC++あたりだと普通RAII + デストラクタなので、「終了時にはfreeしない」戦略が
手抜きにならないどころか、「特別扱い」するほうが面倒な気がする
それなら(Winの場合なら)ExitProcess呼べば良いだけだから面倒じゃないよ
>>496 ヒープの大半がページアウトされたプロセスの終了時間だろ?
やっぱりどうでもいいとしか思えん。
仮にもしそれが本当にcriticalな問題になるケースならば、
「もう使わない領域のfreeのためのページインは無駄だが、
実際にアクセスするためのページインは無駄じゃないからOK」
なんて言うわけにもいかんだろうし。
>>496 criticalな問題ってのがどの程度のものなのかは人それぞれだと思うけど
496にとってアプリケーションを終了させてから、(ここで言うアプリケーションの
終了は、ユーザーが終了の意思を示した、たとえばウィンドウのぺけボタンを
押したり、メニューから終了を選んだりしたときのこと)、
プロセスが終了するまで、じっと数秒待つのはできたら避けたいことじゃぁないの ?
> 「もう使わない領域のfreeのためのページインは無駄だが、
> 実際にアクセスするためのページインは無駄じゃないからOK」
> なんて言うわけにもいかんだろうし。
実際アクセスするためのページインは必要だからやらなきゃいけないんじゃ
ないの ?
「じっと数秒待つ」のも、必要なことなら許せるというなら気分の問題でしかない。
freeのコストも必要なものだと考えれば気が楽になるぞ。
ごみプログラマの自己満足以外に何の役にも立ちませんが
ユーザはプロセス終了時に数秒間待つコストを払ってください
>>499 >プロセスが終了するまで、じっと数秒待つのはできたら避けたいことじゃぁないの ?
で、ワシらは「じっと待つ」ことの意味がわからんからそこを聞きたいのだが、彼はなんと言ってくるのだろう?
大至急再起動かけんといかんような感じなのかね?
屁理屈言ってないでfree書けや。
その上で必要なら特殊な終了処理を入れるんだよ。
お前らをfreeしたいわ
解放して再利用するなんてありえん。
kill( ) したいわ。
>>501 終了時にまったくアクセスする必要のないメモリブロックが大量に残って
いるようなプログラムを書いて、それがページアウトされてしまうような
少ないメモリの環境で動かした場合はそりゃ仕方ないわな。
笑=malloc(バカ)
free(笑)
馬鹿が書いたプログラムの終了間際の無意味なfreeの所為で
ページアウトさせられてしまう他プロセスは良い迷惑だな。
fprintf(stderr,
"馬鹿が書いたプログラムの終了間際の無意味なfreeの所為で"
"ページアウトさせられてしまう他プロセスは良い迷惑だな。"
);
freeをかるくすればいいんじゃね?
アロケータもいじれない奴はそっとしておいてやりましょう
この手の人間が「大物アプリ」とやらを作ってると考えるとゾッとするな
513 :
デフォルトの名無しさん:2013/01/20(日) 09:44:06.19
バカが主張しているfreeすべき理由って「再利用する可能性があるから」だけだろ。
お前らバカが書いたソフトが再利用される可能性は皆無だから安心しろ。
こないだ久々にpure Cのコード書いたが↓みたいなgotoの連打になった
っていうかこう書かないと大量ネスト+解放箇所分散化で悲惨だと思う
goto使わない教の人ってどう書いてるんだ?
FILE *fp = 0;
char *p = 0;
:
if (some_error) goto LABEL;
LABEL:
if (fp) fclose(fp);
if (p) free(p);
:
リークチェックで検出された結果に対していちいち、「これは終了直前まで
実際に必要だったブロックで、終了時のfreeを省略したために出ただけ
なんで無視。」とか確認するだけでも無駄だな。
freeを省略してもいいって人はリークチェッカとか使わないんだろうか。
>>514 free(NULL)は無問題
よってfree()をあえて書く必要はない信者といえどもそれくらいは知っている
>>514 fclose(NULL)はアウトだからラッパをかます
>>514 do {
if (some_error) break;
} while(0);
とかじゃね?
俺はそのパターンの時はgoto使う派だけど。
終了時に全部freeするのは全然構わないけど、
そのために数秒止めるようなコード書く馬鹿はCを使うべきじゃない
520 :
499:2013/01/20(日) 12:12:28.75
>>502 一番思いつくのは、WindowsでGUIのプログラムを使って、
終了を選択したのに、ハードディスクがくるくる回って、
Windowsキーを押してもスタートメニューが開かないような常態。
あと、gccなんかでカーネルとか馬鹿でかいプログラムを
コンパイルするときなんか、全く無駄な処理で時間をつぶしたくは
ないですよね。
だめだこいつ(笑)
>>518 該当部分を関数にしてreturnってのもあるけど
それだけの為にってのはなあ
何GBもメモリ確保して終了まで開放しないようなアプリの話か?
かなり特殊なケースだが、そもそも終了に限らず動作自体遅くて
しょうがないだろう。
本当にそういう条件で動かす必要のあるアプリなら、終了時の
freeどうこう以前にもっと考えなきゃならんことがあるだろ。
> かなり特殊なケースだが
それはお前の経験値が不足しているだけ。
経験積んだら
>>523みたいなプログラムが一般的になんのかよw
経験値が足りないバカは経験値を積んでもやはりバカ。
経験値って、昔から使われることばだけど、なんか変だな。単に経験でいい
経験値って言いたいだけの
>>524 とか、スルーで良いと思うんだが…
529 :
デフォルトの名無しさん:2013/01/20(日) 15:10:53.58
んじゃ、経験に基づかずに「かなり特殊なケース」であるというソース示しなよ。
バカには無理だろうけど。
「ソース出せ」は先に言ったモン勝ちw
>>529 おまえが、「何GBもメモリ確保して終了まで開放しないようなアプリ」の例を挙げれば良いだけの話。
もちろんソースつきでな。
結論の出なかった論争のリプレイなんだから
結論出るわけがないんだけどね。
>>523 とりあえず、そういう分野があるということはご理解いただけたみたいですね。
例えば有限体積法なんかでごりごり連立一次方程式を解こうとすると、
最初にがーっとメモリを確保してそれを最後まで使い続けます。
HPCっていうそこそこ大きい市場もあるんだからそれほど特殊とはいえないと
思うんだけど。
連立一次方程式の解放ならそれほど複雑なメモリは取得しないけど、
コンパイラの構文木なんかをプロセス終了時にちまちま解体してたら
あほっぽいよね。
>>532 リプレイ?
相手の言い分は例外と決めつけるだけの単純な作業じゃん。
劣化コピーにもなっていない。
メモリプール使えでFA
536 :
デフォルトの名無しさん:2013/01/20(日) 15:48:56.83
>>531 KVストアなんて全部その類。ソースはキーワードさえわかればバカのお前でも検索できるだろ。
ねぇねぇ、ところで、ここにいるmallocしたぶんは絶対freeしなきゃだめ派の人って
ウィンドウ右上のペケボタンを押したときのexit処理の前にも全てのオブジェクトを
解放して回るの ?
538 :
デフォルトの名無しさん:2013/01/20(日) 15:53:52.15
シグナル喰らって異常終了する時もすべて解放しなきゃいけないらしいですよ。SIGKILLは使用説明書で禁止するのかな。
execveする時の為にスタティックな領域も用意しておいて、そこにコピーするんだって。
freeしないバカって、mtraceで試験すらしないからそんなこと
言えるんだろうな。品質悪そうだ。
>>533 それをいちいちページアウトされてしまうような環境で実行して、しかも
終了の時間が重要なんて状況はとても一般的とは言えんだろう。
>>537 KVM ?
ひょっとして KVS のことか?
KVM でも KVS でも良いんだが、「終了まで解放しない」と言うソースを出してみなよ。
どうせ「ぐぐればわかる」と言って逃げるんだろうけど。
>>537 そういうのは、ライブラリがやってくれるよ。たぶん。ほとんど待機しないですぐにとじたりする。
自分で用意したボタンをおしたときのほうがおそいことがある
「変更されています。保存しますか?」
>>537 今時 GUI アプリで malloc( ) , free( ) 使う方が特殊だと思うのは、俺だけか?
>>541 やっぱ、お前バカだ。www
freeしたらどこにデータ持つんだよ。
>>545 はいはい、ごたくはいいからソース出してみなよ。
>>533 プロセス空間に散らばったメモリブロックをfreeして回るのに時間がかかると
いうことだったと思ったが?疎行列に特化したアルゴリズムならちまちま
メモリを確保してもおかしくないが、その場合、確保するばかりで増える
一方だとしたらなんか変だな。
コンパイラの構文木の方は、それこそコンパイル中に何度でも作っては
捨てるから廃棄ルーチンは当然書くと思うが?それをわさわさ終了時だけ
呼ばないとか不自然なことするか?
549 :
デフォルトの名無しさん:2013/01/20(日) 17:05:34.98
プロセス空間に散らばったメモリブロックをfreeして回るのに時間がかかることはないでしょう。
なぜなら、時間がかかるのであれば、対策しているはずだから。
freeが必要なのは、プロセス終了時だけではないのですよ?
アプリが起動している時にこそ、たくさんのfreeが行われてるはずです。
>>547 で、どれが「何GBもメモリ確保して終了まで開放しないようなアプリ」なんだ?
ついでに、どこから「終了」なのかも明示してくれ。
>>548 まあ、コンパイラの作り方にもよるけど、シンボル関係の管理表などは終了まで
追加するのみで廃棄しないこともありえる。
ただ、俺は知らないけど、何GBものメモリを確保するらしいから、それは
>>524 とかがソース付きで示してくれるんだろうよ (w
全部。ソース読めないのはお前の責任。解説してやろうか? 有料で。
namazは何Gまではいかんか。それは除外してもいいぞ。
>>551 > 解説してやろうか? 有料で。
解説できない言い訳乙 (w
free要らない厨があまりに素人丸出しでつまらない
555 :
デフォルトの名無しさん:2013/01/20(日) 17:22:12.41
ソース出せ必死になってて、出されたら読めねーでやんの。www
556 :
デフォルトの名無しさん:2013/01/20(日) 17:23:06.89
金だしたら教えてやるって言ってるだろうが。
誰にでも理解できるように提示できないものはソースとは呼ばない。
さっさと出しなおせ。
>>550 emacsとspiceはexitが呼ばれるまで。
linuxはreboot()が呼ばれるまで。
561 :
デフォルトの名無しさん:2013/01/20(日) 17:30:35.81
>>559 バカには理解できないからそれは不可能。ww
>>561 自分がバカで出せないから不可能?
わかります。
>>561は適当にでかいファイル貼っただけだからファイル中のどの部分か提示できなくて内心ガクブルw
こういう説明を求められたときに逃げ出す人って
100%まったく理解していないよねw
freeしないとmtraceに怒られる。
だからfreeは必要。
はい論破w
mtraceに限らずメモリリークチェックツールには怒られる
行儀の悪いプログラム書く奴ってそういうの使ったことないんだろ
567 :
デフォルトの名無しさん:2013/01/20(日) 17:39:56.79
読めもしないのにコード要求するな。バカwww
>>567はどこのスレでも浮いてる人かな
メモリ検査には触れずに都合のいいレスにだけ食いつくような特徴ある行動する人
>>540 連立一次方程式の解法は最初から最後までメモリを確保したままの例で
ということで出しました。
連立一次方程式の解法はたしかに、物理メモリ上で
すむように計算の大きさを制御するけれど、
問題によっては、仮想記憶を使いたくなるようなシチュエーションも
出るのではないでしょうか ?
レアケースかも知れないけれど、存在するって言うことで、
で、仮想記憶を使わないとしても、俺の実際見ただけでも、数万回のmallocを
やってる例もあって、もっと細かいオブジェクトをたくさん使う分野なら、
何千万のオブジェクトをもっても不思議じゃないでしょ。
それを、exit前にちまちま回収する?(回収してすぐに廃棄)
freeはそんなに簡単な処理じゃなく、結構な時間がかかるんじゃないかな
終了の時間が重要じゃないってのは、そういうのはバッチファイル
でやるから、全体の実行時間が多少伸びても、コーヒーでも飲んどけ
ってこと ?
そうは言っても、無駄なものは無駄だよね。
あと、GUIをかませて、MicrosoftWordを使ってる機械で動くようさせられた
こともあります。
この場合、計算->ワードに書く->ページアウト->シミュレータを終了
するとexit前にfreeした場合、ページインが発生しますね。
>>566 「俺のコードはそんなツールじゃ判断できないぜ!」
「この糞コーディングルールは××の場合に○○だから完全じゃない。
俺はそんなルールに縛られないぜ!」
と言って、どうでもいいところの改善にこだわったりする。
そんなもんmtrace黙らせたいだけなら
#ifdef MTRACE
cleanup_things();
#endif
とでもすればいいだけじゃね
572 :
デフォルトの名無しさん:2013/01/20(日) 17:59:24.43
>>571 これはひどい
怒られたとこは全部切っとけばおとなしくなるね
でもお願いだから君はプログラム組まないでね
ちなみに今は、ページアウトするような狭いメモリの中で
参照していない大きな領域をexit前にfreeするとページインが
発生して数ミリ秒程度処理が遅くなる、という話をしています。
どのみちexit処理でページインしてしまうんですけどね。
>>571 -Wallでwarningが出ないこと、って条件を付けたら
Makefileから-Wallを消した人に似ている。
576 :
デフォルトの名無しさん:2013/01/20(日) 18:01:19.00
> 参照していない大きな領域をexit前にfreeするとページインが
> 発生して
それが間違い。
その場合にページインは発生しない。
>>572 こいつ適当に別人のレスをつなぎ合わせて反論に困ったレスをなかったことにし始めたぞ
>>573 意味わかってる?
「切る」んじゃなくて、解放処理を*全て*実装して、cleanup()でそれを呼ぶ
ただしMTRACEが定義されているときだけ
mtraceでチェックしたいときはMTRACEを定義してコンパイルすればいい
MTRACEを未定義にすればそれは含まれないので、不要な解放処理を
リリース版から削除できる
579 :
デフォルトの名無しさん:2013/01/20(日) 18:02:27.11
理屈はファイルを削除するときに
ファイルを読みこまなくてもいいのと同じ。
>>578 つまり、freeを書く必要はある、ということを認めるわけですね。
>>578 意味わかってる?
constキャストと同じことだよそれ?
>>580 俺は別に俺はfree()を書くことに反対してないけど……
void onDrow()
{
Rect* rc = new Rect(x, y, w, h); // freeしたら負けなので絶対しないこと
}
ああなんとなくわかった、
>>581はただコンパイラ(など)を黙らせるためだけの
コードに嫌悪感を抱いてるのか
cleanup()を有効にした状態でプログラムが正常に動作しリークも検出されないなら
確保したリソースをきちんと追跡できていることは確認できるだろ
というか一定程度以上複雑なプログラムならプールでも使って、最後にプールを
削除するかしないか程度の差でしかない筈だが
(EmacsのようなLisp処理系ならガーベージコレクタを実装するわな)
うちの方だと物重視でバイナリが変わったらテストやり直しっていう文化がある
freeする派完全勝利!
free絶対必要派はmtraceを黙らせるためにexit()前にfreeを並べる
(終了のために解放処理を行う)と。
そういう人ならWindowのペケボタンを押したときのなんかの処理にも
freeが必要って言っても納得できる。
10年前のfjとこのスレの議論でfree絶対派(exit前でも回収する必要ないのに
わざわざfreeする派)の言うことで納得できたのは
1. mallocとfreeは対で使えと言っておかないと、freeが必要な場合でも
. freeしないど低脳が俺の周りにいるんだよ。無い頭使わずfreeしろ !!
2. mtraceを使うから。
なんだけど、あと他にあるかな ?
そもそも、mallocを持っているすべてのシステムで、
mallocされたメモリがプロセスの終了時に返却される保障はない。
ANSI Cのホスト環境で保証されている。
「保障」とか使ってるバカは知らなくてもしょうがないけどね。
>>588 だいたいいいと思うよ、ただ俺の場合、1.は「周りが低脳」というより
自分の頭も楽にするためだな。
どうでもいいことにこだわってわざわざプログラミング難しくして
どうすんの?って感じ。
本当に必要な要件にはそれなりの対応があるわけだし。
>>590 規格通りの環境しか使ったことない初心者は気楽でいいですね。
組み込みだと、libcに似た互換ぽい全然別の何か、が標準ライブラリだったりするからね。
わかって解放しない横着者はともかく、「規格です」とかいって解放しないバカが沸くから
必ず解放しなければならない、ということにしておいたほうが都合がいい。
>>592 規格外の超例外まで持ち出して必死ですねw
595 :
デフォルトの名無しさん:2013/01/20(日) 19:21:09.24
保障バカが必死に食いついてくる。www
589からここまですべて自演
メンテ性?移植性?実装がめんどくせーそんなの知ったことじゃねーよ、買うのはエンドユーザでエンドユーザには
そんなことは関係ないんだよ。ユーザーの時間単価をなめるなと。
客先に急ぐときに終了が遅いソフトってスゲーイライラするのも知らないのか?
会社から与えられるPCが十分なスペックだとは限らないこともしらないのか?
「そんな会社に勤めるなよ」なんていう馬鹿がいそうな気がするが、作る側の論理?
自己満足でそんなことを強制されるなんてたまったもんじゃねーよ。
free()命の話を読んでいると、free()だけじゃなくほかにも無駄なことをやりすぎているような気がするんだよな。
fjの頃にもこんなスレッドがあったけれど、これだけPCの性能が上がっているにもかかわらず、しかもソフト自体の
機能はそれほど変わらないのに、なんで未だに速度面で不満があるものがたくさんあるんだ。
っていうのが両方の立場にいる俺の意見だな。
>>560 > emacsとspiceはexitが呼ばれるまで。
どこの exit( ) ?
まさか、一箇所しかないとか思ってないよね?
> linuxはreboot()が呼ばれるまで。
さすがにバカすぎるから、こっちは見逃してやるよ (w
>>598 560ではないんだが
> どこの exit( ) ?
> まさか、一箇所しかないとか思ってないよね?
一箇所でもあれば、freeせずにexitする場合も存在するということになるが
free絶対必要でemacs, spiceはその理念に則っているって言うなら
(598がそう言ってるかどうかは別として)全てのexit前にメモリの解放処理
が必要になってくるよ。
ぶっちゃけmtraceを公開しているGNUのプロダクトもexit前のfreeなんて
ほとんどやってないんじゃないの ?
だれか、確かめてよ << 他力本願
>> linuxはreboot()が呼ばれるまで。
> さすがにバカすぎるから、こっちは見逃してやるよ (w
結構、本質的な問題だと思うけど、
プロセスなりカーネルの動作なりが終了して、全てが白紙になる前に、
無駄なfreeをするのは必要かって議論でしょ ?
プロセスの終了とカーネルの終了のこの問題での本質的な違いはあるの ?
>>599 >
>>598 > 一箇所でもあれば、freeせずにexitする場合も存在するということになるが
で、どれが「何GBもメモリ確保して終了まで開放しない」のって聞いてるんだけど、
理解してる?
>プロセスの終了とカーネルの終了のこの問題での本質的な違いはあるの ?
malloc( )/free( ) がどのレイヤーで実装されているか確認しようよ。
601 :
デフォルトの名無しさん:2013/01/20(日) 21:24:41.31
>>598 お前やっぱりバカ。www
どこから呼ばれようとexit()は一つ
> さすがにバカすぎるから、こっちは見逃してやるよ (w
翻訳すると降参ってことね。
>>601 >どこから呼ばれようとexit()は一つ
翻訳すると降参ってことね (w
linux の方は、
>>600 見てから書いてる?
見てないならまだしも、見てたら単なるアホになってるぞ。
603 :
デフォルトの名無しさん:2013/01/20(日) 21:42:38.27
>>603 おまえはsignalでも使って割り込んでろ
605 :
デフォルトの名無しさん:2013/01/20(日) 22:34:29.64
>>602 お前本当にバカなんだな。どこから呼ぼうとexitは一つなんだから、
exitを明示的/非明示的を問わず、呼んでるところのすべてって意味に決まってんだろ。
ここまで解説しなきゃわからない。バカには限界値が無いようだ。www
> linux の方は、
>>600 見てから書いてる?
> 見てないならまだしも、見てたら単なるアホになってるぞ。
kmalloc/kfreeはmalloc/freeじゃないってか? www バーカ。バーカ。バーカ。バーカ。
ついに壊れた (w
具体的に聞くとこういう返ししか出来ないところが、哀れだな。
幼稚園かここは
そんなことぐらい自分で判断しやがれ
ここで聞いても答えはでんだろ
他の人の意見を聞くならまだしも
お前が信じるかどうかなんて知ったことじゃねえ
>>600 > > 一箇所でもあれば、freeせずにexitする場合も存在するということになるが
>
> で、どれが「何GBもメモリ確保して終了まで開放しない」のって聞いてるんだけど、
> 理解してる?
うーーん、それはソースを追ってみないことにはわからないけど、
少なくとも何GByteもメモリを確保したのを解放っていうコストが無い
(数10MByte分のコスト)場合ですら、exit前のreeを行わない、
コストは0ではない以上、全く得るものの無いexit前のfreeなんかを
行うことはただの無駄だという判断なんではないかな。
んで、数GByteという話は、あくまで悪い事例を挙げたもので
そんなコストがなくても無駄なコストを避けるって一例になるんでは
ないだろうか。
っていうか、常識的に、わざわざ時間のかかる数GByteの解放は
しこしこfreeするのに、数MByteの場合はそれを省略するなんて
考えられる ?
GNU Emacsの開発陣がfree絶対派だったら全てのexitの前にfree
してるって
死体に鞭打ってやるなよw
ここはひとつ線香の一本でも上げがてら名残り惜しんでやれよw
>>600 > >プロセスの終了とカーネルの終了のこの問題での本質的な違いはあるの ?
>
> malloc( )/free( ) がどのレイヤーで実装されているか確認しようよ。
ここで言ってる本質的って言うのは
再利用されることのないメモリをfreeなどの機構を使って、
再利用するために整理するかどうかっていうこと、
基本的にはfreeはOSから確保したメモリを再度mallocできるように、
整理することが目的で、別にOSにメモリを返すものではない。
(OpenBSDみたいにそういう実装もあるけど、どっちかというと特殊な部類)
malloc()/free()はアプリケーションのライブラリのレイヤーで実装されて
いるんだよね ?
sbrkやmmapでOSから確保したメモリを使いまわすためのライブラリで、
OSからはどんな感じでmalloc/freeを行われたかはわからないよね。
だから、OSから確保したメモリ全てをfreeして、全ての領域を再度malloc
できるようにした状態と、mallocしっぱなしの状態もOSにとっては
全く変わらないっていう認識は共有していると考えてよろしいでしょうか ?
なもんで、exit前のfreeは全くの無駄、どのくらい無駄かというと、
OSが電源切断の前に、RAMの中身を整理するぐらい無駄。
これが、本質的に変わらないでしょって書いた意味です。
そんなことでは、ちゃんとfree()できるけれどもしないのか、できないのかが区別つかないよね。
ダングリングやリークを起こさないという地震があるの?
>>50 でいいんじゃない?
>>588 たぶんだけど、必要と言ってる人は感覚的にそのように書いちゃうくせがもう出来上がってるから
端的に質問すると(書くもんだって反射的になるから)あんまよくないかもね
シグナルハンドラさえまともに実装できないウンコは引っ込んでろ。
atexitの関数内で全部freeしときゃok
シグナルがある環境、うらやましいです。
プロセスのある環境、うらやましいです。
mallocのある環境、うらやましいです。
619 :
デフォルトの名無しさん:2013/01/21(月) 23:54:41.28
freeいらないって言うのは相対性が崩れるのを気持ち悪いと感じる感性がないんだろうなとは思う
>>609 コスト最重要視するなら、アセンブラでゴリゴリ書けば?
もうそういう時代じゃないんだよ。
621 :
デフォルトの名無しさん:2013/01/22(火) 05:16:23.03
そもそもメモリを解放するコストは限りなく0に近いんだよ。
まずfree()を実行することでスワップインすることはない。
なぜなら、メモリを管理している領域と
メモリの実態は別だから。
メモリを管理している領域は頻繁に参照されるから
常にメモリに乗っている状態。
メモリのスピードは一般的なパソコンで
1GB/s〜10GB/sでるんだから
どんなに効率悪いメモリの使い方をしていたとしても
アプリ終了の最後の一回に1秒未満の時間が加わるだけ。
>>621 それだと終了後に長い間ディスクアクセスがなんたらかんたらと言い出しかねんぞ
623 :
デフォルトの名無しさん:2013/01/22(火) 08:45:08.40
>>622 終了時にデータ保存するアプリかなんかだろ?
freeをやめたら、長いディスクアクセスが
なくなるというコードを持ってきたら
話聞いてやるよw
配列のポインタ配列みたいなデータ構造だと、
配列を解放するためにポインタ配列にアクセスしないといけない。
それがポインタを持ったリスト構造だったりした日には
解放する為にポインタを辿らねばならず、それ自体のコストが馬鹿にならない。
なので、コスト節約のためにfree()省略と言うのも判らんではない。
>>631 実装によっては、管理データはmallocが返したポインタの前にくっついてるじゃん。素人乙。
626 :
デフォルトの名無しさん:2013/01/22(火) 20:44:46.58
コード読めないバカがまたコード要求してる。ww
バカバカ言う奴が一番バカなんだよバカ
あっ
口だけが口挟んでる
>>624 ヒープの大半がページアウトした状況も含めて終了に要する時間が重要な
要件だったとしたら、そんな構造のデータを終了直前まで大量に保持してる
コードを書いてる時点でダメだろ。
アホなコードを書いたらアホな対策が有効(ただし効果は限定的)ってだけ。
なんでこいつら極端な例で遊んでんの?
一般的な例だと議論に持ち込めないから極端な設定でっちあげて優位に立ちたいんかね。
そんなことぐらい自分で判断しやがれ
ここで聞いても答えはでんだろ
他の人の意見を聞くならまだしも
お前が信じるかどうかなんて知ったことじゃねえ
この例を最初に持ち出したのは河野真治だっけか?
本人は軽い気持ちで言ったんだろうが、まさか10年後に
まだ真に受けてる奴がいるとは思わなかったろうw
おまえら
>>558 読めよ
Windows XPまたはそれ以前という糞OSではそれ全然「極端な例」じゃないから
fjの論争(10年前まで、fj終了してなかった事に驚き)とやらは知らんけど、
すぐ終了するのに解放処理書くの面倒だから書かねーんだよ。
工数は増える、バグが混入する可能性も増える。良い事はあまりない。
終了時に遅くなるなんてのはどうでもいい。
>>633 それも長時間アクセスしない場合だろ?つまり、
・大量にメモリを抱えたまま長時間アクセスせず
・終了時にもfree以外にアクセスする必要はなく
・しかし終了に要する時間だけは重要
この3条件が揃って初めて成り立つ議論なわけだ。
そもそもWindowsだと、立ち上げたままのアプリを時間をおいて
操作するだけでディスクアクセスで一呼吸待たされたりするが、
終了時のページインのコストなんかにこだわってる人はそっちは
目をつぶるのかい?
>>636 >・しかし終了に要する時間だけは重要
誰もそんな話言ってないだろ、なんでそう曲解するんだか
少しでもベターなユーザエクスペリエンスを提供したいと考えるなら、
改善可能なところは改善したいと考えるもんじゃないのか
終了前のfree云々はあくまでその中の一つでしかな
どこを「ベター」にするのか、それをどのような手段で実現するのか、
そのポイントがずれてるんじゃないか?ってことだ。
639 :
デフォルトの名無しさん:2013/01/22(火) 23:26:16.83
終了時のfreeをなくしても
ユーザーエクスペリエンスの改善にはつながらない。
なぜなら、freeを無くすことで改善されるという
実証コードが存在しないから。
机上の空論、いつまで続けるの?
コード読めないバカが必死だな。
freeしない方はする方より確実に早い。違うというなら実証コード出してみろ。w
コード読めないバカが必死だな。
freeしない方はする方より確実に速い。違うというなら実証コード出してみろ。w
freewを消すことで速くなるという実証コードは
存在しないからだしようがないでしょ?
まあ普通にfree消しても何も変わらなかったとだけは言っておく。
コード欲しい?
int main() {
void *ptr = malloc(ものすごく大きい値);
/* free(ptr); */
return 0
}
これだけだけどね。free入れても入れなくても変わんない。
>>640 直近20レスくらいプリントアウトしたものを近くの人に見せて、
「この中でバカは誰?」って訊いてみるといいぞ。
聞いてみたら、「これ見みてどうしろと?」って言われた。
どうすればいい?
>>643
645 :
デフォルトの名無しさん:2013/01/23(水) 00:56:25.98
自分のレスの馬鹿っぽさを客観視してみろという皮肉だったんだが、
本当にやったのか。そりゃ訊かれた人も困ったろう。
646 :
デフォルトの名無しさん:2013/01/23(水) 01:23:42.04
ほらよ、遅くなる「コード」だ。バカには読めないかもな。
$ time ./baka 1
4.43 real 4.02 user 0.40 sys
$ time ./baka
1.71 real 1.57 user 0.13 sys
#include <stdlib.h>
struct l {
struct l *next;
int data;
} *root = NULL;
void free_l(struct l *p)
{
if (p->next)
free_l(p->next);
free(p);
}
int main(int argc, char **argv)
{
unsigned long i;
for (i = 0; i < 10000000; i++) {
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
}
if (argc > 1)
free_l(root);
return 0;
}
mallocした領域の生存期間の話じゃないの?
単純実行した速度の話はまた、別の話題のような?
>>646 ほとんどが再帰呼び出しのコストだな。
10000000段ものコールスタック
いったいスタックどれくらい消費するつもりだよw
>>648 別に再帰をループに書き直しても速度差はあるけど?
650 :
デフォルトの名無しさん:2013/01/23(水) 07:58:16.68
> ほとんどが再帰呼び出しのコストだな。
こんなに簡単に引っかかるとは、清々しいほどのバカだな。w
「再帰呼び出しは遅い」を意味も理解せず信心してるバカ。ww
正しくは「再帰呼び出しは繰り返しより遅い」だ。憶えとけ。バカ。www
freeしない
1.70 real 1.57 user 0.12 sys
free再帰
4.39 real 4.00 user 0.39 sys
free繰り返し
3.79 real 3.66 user 0.12 sys
不要なfreeの為に実行速度もバグの入る可能性も高くなる実証コードだけど、バカには読めないかもね。
cb2f247135ebc373f737e1306a05563419cdcdee
651 :
デフォルトの名無しさん:2013/01/23(水) 09:04:21.45
freeの処理でバグの可能性が高くなるってところに決定的な認識の違いが現れてるな。
破棄するときのことを考えずに書いて後でハマるパターンだろ。
オブジェクトの生成破棄なんてどこでも必要になるんだから定形的に書いておけば
いいのに、いちいち「この場合は必要、この場合は不要」なんてやってるから
余計なバグを増やすんだと思うぞ。
ライブラリ使うだけの簡単なお仕事しかやらないバカにはわからない。
終了直前にfreeするためだけに、不要なデータ構造にして、不要なコード書いて、
バグ作りこむ可能性を高くする。
バカのやる事。
わけもわからず、楽?しようとするからじゃね
初心者脱出できねえのは
>>642 > int main() {
> void *ptr = malloc(ものすごく大きい値);
> /* free(ptr); */
> return 0
> }
実際にアクセスしないと何も起きないんじゃないの?
size_t ss = ものすごく大きい値;
unsigned char *ptr = (unsigned char)malloc(ss);
for(int i=0; i<ss; i+=12345) ptr[i] = (unsigned char)(i % 256);
/* free(ptr); */
みたいにしたら?
>>652 > 終了直前にfreeするためだけに、不要なデータ構造にして、不要なコード書いて
もう何言ってるか、自分でも分かってないだろ?
ただ口答えしたいためだけに、屁理屈つけてゴネてるとしか見えん
656 :
デフォルトの名無しさん:2013/01/23(水) 15:53:40.68
コード読めないだけじゃなく、日本語すら読めない。バカ。www
どうでもいいけど
freeしたらバグ増える
なんて言っているバカとは仕事したくないな
コードを書けば0以上の確率でバグが紛れ込む。
解放処理だけは特別とか考えるバカは死んだ方がいい。
いや、freeしない設計は認めるけど
freeしたらバグるってのは設計できていない証だから
>>658 解放処理でバグがでるのは、獲得した領域の扱いそのもののミスなのでかなり致命的。
解放処理でバグが出るやつのソースはすべてにおいて信頼できないクズソースであると認識すべし。
なるほど、バグが怖いからfreeしないわけか
freeいらない派が低脳な理由がわかったよ
・int dummy[100]; // これがあるとなぜか上手く動く
・//free(p); // これをやると上手く動かないからコメントアウト
freeしないって人のプログラムは領域破壊なんて当たり前、
くらいに思っていたほうがよさそうだな。
要は動けばOKの人たちということが分かった。
当然SIGKILLも捕まえてfreeしてるんですよね?
でたよ、free派なら強制終了されてんのにfreeするんだろ?ってやつ。
正常系の終了と異常系の終了の区別も付けられないんだなfreeいらない派
むしろfreeのバグを0にできない無能はPGやめて農業でもやってるべき。
>>666 そんな奴が農業やったら作付で領域破壊w
668 :
デフォルトの名無しさん:2013/01/23(水) 21:16:29.09
知能が足りないバカが
>>661のような勘違いしてるようだから念のために言っとくけど、
freeしない設計とは
>>646でいえばfree_l()が不要になるという事だからな。
freeでバグる人は、
図書館で本借りても、
返す時に間違えて別の本返しちゃうかもしれないから
返さないで借りパクしちゃうの?
671 :
デフォルトの名無しさん:2013/01/23(水) 21:19:33.14
>>669 バカのたとえはたとえになっていない。www
OSがまとめて回収する機能は図書館で言うとどういう仕組みに該当するんだ? www
672 :
デフォルトの名無しさん:2013/01/23(水) 21:20:04.18
>>669 どうせ督促状来るからそれまでいいやと開き直るタイプらしい
>>668 free_lを呼ばないとmtraceが怒るので、検収に通りません。
674 :
デフォルトの名無しさん:2013/01/23(水) 21:20:29.27
まともなプロジェクトで働いたことないんだと思う。
>>665 SIGKILLじゃなかったらシグナル捕まえてfreeしてるんですね
678 :
デフォルトの名無しさん:2013/01/23(水) 21:22:25.01
>>671 >OSがまとめて回収する機能は図書館で言うと
行政破たんによる図書館の廃止
680 :
デフォルトの名無しさん:2013/01/23(水) 21:28:53.53
>>673 でた、ツールの奴隷。ww
本末転倒って言葉を知らないんだろうな。ww
>>680 メモリリークや破壊がないことの証明に苦しんだことのない
アマチュアの言い分だな
GC使えるなら使っときゃいいやん
>>663 なんでSIGKILLw
SIGTERMなら捕まえることはあるよ。サーバーを安全に停止させるためとか。
>>680 プログラミングごっこではあまり使わないかもねw
mtraceごときでメモリリークや破壊がない証明とかw
それこそアマチュアレベルww
freeの処理でバグの可能性があるとか言ってたくせに、大きく出たなw
688 :
デフォルトの名無しさん:2013/01/23(水) 21:43:31.63
>>669 本の中身を領域破壊でめちゃくちゃにしてるので
返したくても返せません。
>>666 そうそう自前でラッパを書けばいいこと。バグが怖いからfree()しないって?爆笑
>>690 ラッパ書いて自分でメモリ管理作っちゃう人ですか?
692 :
デフォルトの名無しさん:2013/01/23(水) 22:01:14.57
シグナル処理も満足に書けないチンカスは引っ込んでいなさい。バグ絶賛放置中だろ。www
草生やしの猿一匹が必死だこと
695 :
デフォルトの名無しさん:2013/01/23(水) 22:07:53.19
696 :
デフォルトの名無しさん:2013/01/23(水) 22:09:27.02
経験則だとデータの削除はデータの挿入に比して1.0-1.3倍複雑。
free楽勝とか言ってるバカはおもちゃプログラムしか書いたことないんだろ。www
経験則によるとオナリストの作ったデータの削除はデータの挿入に比して1.0-1.3倍複雑
free複雑とか言っているバカは単なるオナニー野郎
データの挿入が作れるのに削除が複雑とか、脳みそ足りてないんじゃないか?
芝生やすのに一生懸命になりすぎてデータ構造とアルゴリズムの勉強不足だな
連結リスト構造の解放処理でダブルポインタが出てきて処理が理解できない人?
まさかのfreeいらない派ポインタを使いこなせない説www
703 :
デフォルトの名無しさん:2013/01/23(水) 22:20:38.92
>>700 連結リストでダブルポインタとか素人かよwww
ポインタの理解が微妙でfreeするとバグるから
freeいらないっていう主張だったとは。
>>683 > SIGTERMなら捕まえることはあるよ。サーバーを安全に停止させるためとか。
もちろん安全に停止させるためにfreeしたんですよね?
でた〜、言い逃れできなくなると話しそらす奴
>>706 メインスレッド側でね。ハンドラはフラグ立てるだけ。
709 :
デフォルトの名無しさん:2013/01/23(水) 22:43:24.89
ダブルポインタ? double *の事か? www
そういえばQzとかいうチンカスがこの意味不明な用語使ってたな。www
>ダブルポインタ? double *の事か? www
>ダブルポインタ? double *の事か? www
>ダブルポインタ? double *の事か? www
さすがにその話のそらし方は苦しすぎるw
double pointersでもpointer to pointerでもいいけど
ポインタの理解が微妙でfreeするとバグるから
freeいらないっていう主張だったとは。
の事実からは逃れられない
713 :
デフォルトの名無しさん:2013/01/23(水) 22:49:26.96
ダブルポインタってこのチンカス以外で使ってるバカにあった事ないけど、
底辺ではふつうに使う用語なのか? www
714 :
デフォルトの名無しさん:2013/01/23(水) 22:50:36.57
まさか、「ポインタのポインタ」とか言ってるわけないよね!?
wwwの人の残りライフの少なさを感じる。。。
「ポインポイン」に決まってるだろwww
719 :
デフォルトの名無しさん:2013/01/23(水) 23:13:16.63
>>715 規格書にもそう書いてあるが、底辺じゃダブルポインタと呼んでるのか。
底辺向けの書籍にでも書いてあるのか? www
なんて書籍だ?
話題を逸らすのに必死ですw
721 :
デフォルトの名無しさん:2013/01/23(水) 23:18:30.19
解放処理が簡単とか豪語してるバカは
>>646の3行より簡単に書いて見せろよ。www
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
722 :
デフォルトの名無しさん:2013/01/23(水) 23:19:13.83
>>720 で、どの底辺書籍にそう書いてあるんだ? www
=ただいま草男必死中=
そうか、freeのバグ怖いか。
なら確保・解放の個数を減らせばいい。
例えば int型[12][34] 配列を確保・解放する場合…
int i, **d;
だとして、
d = (int **) malloc(sizeof(int *) * 12);
for (i = 0; i < 12; i++) d[i] = (int *) malloc(sizeof(int) * 34);
; // use d[][]; …
for (i = 11; i >= 0; i--) free(d[i]);
free(d);
じゃなくて
d = (int **) malloc(sizeof(int *) * 12);
d[0] = (int *) malloc(sizeof(int) * 12 * 34);
for (i = 1; i < 12; i++) d[i] = &d[0][i * 34];
; // use d[][]; …
free(d[0]);
free(d);
とする。
>>691 malloc/freeの無い環境ならやるかも
726 :
デフォルトの名無しさん:2013/01/24(木) 08:30:01.55
蜘蛛の子を散らすようにバカどもが逃げ出したな。wwww
* 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
* 解放処理楽勝と豪語しているバカは下の確保処理より簡単に書け。
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
バカだから出来るわけないよね。www
727 :
デフォルトの名無しさん:2013/01/24(木) 08:32:20.36
>>724 バカは問題設定すらまともにできないらしい。www
> 例えば int型[12][34] 配列を確保・解放する場合…
自分で設定した仕様に対し
> d = (int **) malloc(sizeof(int *) * 12);
> for (i = 0; i < 12; i++) d[i] = (int *) malloc(sizeof(int) * 34);
既に仕様通りに出来ていない。 www
さすが底辺。wwww
728 :
724:2013/01/24(木) 20:14:58.53
>>727 × int型[12][34] 配列
○ [12][34]でアクセスしたいint型配列
で良いですか?
解放処理
for (struct l *p = root, *q; p; q = p, p = p->next, free(q));
730 :
デフォルトの名無しさん:2013/01/25(金) 09:01:27.69
>>728 「free楽勝とか言ってるのは、C言語を知らないバカな初心者です」という事を示す自爆レスか 。
バカ哀れ。wwwwwwwww
int (*d)[12][34] = malloc(sizeof(*d));
こっちの方が遥かに簡潔だろう。wwwwwwwwwwww
>>729 ;で区切らず,で区切れば簡潔。 wwww 小学生並みの浅知恵 wwwwwwwww
731 :
728:2013/01/25(金) 20:22:06.21
732 :
デフォルトの名無しさん:2013/01/25(金) 21:25:02.66
>730
配列の要素数があらかじめ分かっていないと使えない方法
さすがに>727はメモリ確保が多すぎてメモリが細切れになりそう(本来なら一度の確保で十分)
>731
式と演算子を理解していれば、あたり前田のクラッカー
734 :
デフォルトの名無しさん:2013/01/25(金) 22:44:11.60
答みてから知ったかするバカが現れた。www
このスレのバカ召喚性能は異常。www
> 配列の要素数があらかじめ分かっていないと使えない方法
お題通りに整数で書いたけど、この知ったかバカは可変長配列知らないらしい。 wwww
それともC89を未だに使い続けている原始人ですか? www
可変長配列は知っているよ
C99から使えるようになった
一部のコンパイラでは拡張機能として使えたけど
もちろんC89をいまだに使いつづけている原始人ですが何か
gccのフラグは-ansi -std=c89 -pedanticですが何か
-ansiと-pedanticは不要だけどね何か
>734
前半について、何のことかと思い>732のURLを見たが両方共だめなやり方しか紹介されていない
少なくとも僕が一度の確保で十分と言った方法ではない
いやー、最近はポインタもまともに扱えない人が多いな
737 :
デフォルトの名無しさん:2013/01/25(金) 23:14:08.94
> gccのフラグは-ansi -std=c89 -pedanticですが何か
Linuxや*BSDのカーネルいじれないポンコツ www
後付けの言い訳は墓穴掘るだけだぞ。 www
738 :
デフォルトの名無しさん:2013/01/25(金) 23:18:59.80
レスすら追えないバカ。 www
> 少なくとも僕が一度の確保で十分と言った方法ではない
それはひょっとしてバカ(
>>724)が「じゃなくて」って言った方か? www
心配されなくてもカーネルは専門家に任せて、その上で動くソフトウェアを作るだけだから問題ないんだよ
ひさしぶりに規格ガチ準拠スレの興奮を思い出した
>738
いや、それは2度確保しているから両方共だめだろ
まぁ、考え方は「じゃなくて」に近いかな
741 :
デフォルトの名無しさん:2013/01/26(土) 00:27:02.84
64 bit Windows の開発ができないポンコツ www
32 bitアプリで2Gまでのファイルしか扱えないポンコツ www
#define free(P) malooc(P*0721)
freeいらない派=バグが怖くてfreeできない無能の集まり
ということが証明されたのがよほど堪えているようだ。
一人レスを流そうと必死なのが涙を誘うw
744 :
デフォルトの名無しさん:2013/01/27(日) 01:43:13.40
証明されちゃったのは
free必須派 == freeなんか楽勝 == 実はバカ素人 じゃん。 wwww
バカ必死。wwww
745 :
デフォルトの名無しさん:2013/01/27(日) 01:46:43.81
free必須バカはまず以下に回答するように。 wwww
* 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
* 解放処理楽勝と豪語しているバカは下の確保処理より簡単に書け。
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
バカだから出来るわけないよね。www
746 :
デフォルトの名無しさん:2013/01/27(日) 01:59:06.21
747 :
デフォルトの名無しさん:2013/01/27(日) 02:54:07.43
>>748 ああ、freeバカじゃなくてそれ以下のバカか。www
別スレでも絡んできたバカだろ www
いちいちfreeする奴は人生の敗北者
749 :
デフォルトの名無しさん:2013/01/27(日) 04:45:06.28
w
必死だねえ
751 :
デフォルトの名無しさん:2013/01/27(日) 09:33:34.85
教義の矛盾を指摘されても、必死で守ろうとバグ入りシグナル処理書いて満足してるチンカス。www
素直にexitしとけばバグ作る事もないのに。www
アマゾンギフト10万円分でバグ教えてあげるよ。www
必死だねえ
freeの処理をかけないからfree不要とか小学生かよ。
754 :
デフォルトの名無しさん:2013/01/27(日) 10:24:11.13
>>753 お前もバカだろ。wwww
(終了直前の)不要なfree処理を書いてバグの可能性を高くするのはバカのやる事といっている。
違いわかるかな? でもバカだからわからないよね。wwww
うんこQzは目視で楽勝に発見できるバグをなおしてから出直しな。www
そうそう、malloc()/free() にまつわる手順前後等のミスは自前でラッパを書いて検出につとめればいい。
バグが怖いからfree()しないって?爆笑
756 :
デフォルトの名無しさん:2013/01/27(日) 10:44:17.75
> そうそう、malloc()/free() にまつわる手順前後等のミスは自前でラッパを書いて検出につとめればいい。
あの誰にも相手にされてないうんこラッパの事か? wwww
あの程度でバグを検出できると思ってるから、お前はダメなんだよ。www
このレクチャーは無料で良いぞ。www
要は「www」の人は、連結リスト構造の解放処理がわかりません(T_T)
ってことなんだな。こんな単純な処理でバグを入れ込むとかwww
まさにクズ人間www
>>753 怖いからやらないレベルなので小学生どころか幼稚園児だな
759 :
デフォルトの名無しさん:2013/01/27(日) 12:39:10.10
freeバカがfree楽勝と豪語する根拠はデータ構造は連結リストしか使わないから。 www
それでもバカだからバグ作りこむんだよな。wwww
freeバカ惨め wwww
761 :
デフォルトの名無しさん:2013/01/27(日) 13:19:44.15
ここまで俺の自演
764 :
760:2013/01/27(日) 13:35:42.59
free不要の人はK社のもしもし向けアプリ作れっていわれたら発狂するんだろうな
>>648 それを含めて解放のコストですけど。
樹状に作られたリンクが途中でくっついていたり、
ループしてたりすると解放も単純じゃないんだけど
で、それをちまちま解放していくのがめんどいから
mallocでごっそりメモリをとって、プログラムのほうで
メモリ管理をして、解放するときはまとめてfree
って、それってmmapでOSからメモリをとってきて
メモリ管理をしてくれるmalloc/freeとまったく同じことしてるじゃん
屋上屋を重ねるってまさにこのことだね
767 :
デフォルトの名無しさん:2013/01/27(日) 13:51:24.40
>>638 終了時のfreeのみ問題にしているのは、
それ以外のfreeは確保した領域を再利用するための*必要な*freeだから
終了時のfreeはただ単純に無駄だから
まぁ、mtraceを通すためっていうのはわかる。
ただ、mtraceを通すためだけにfreeするのって
コンパイラを通すために○○するっていうのと精神に於いて変わらないような。
mtraceはここのmallocはfreeしなくてもいいですよって指示与える機能はないの ?
指示するよりfree書いちゃったほうが速いと言われるんだろうが
>766
言いたいことは分かるが
最後の一文は余計だな
同一関数内でmalloc()とfree()を呼ぶことはあまりないと思うんだよなぁ
lintさんはちゃっかり警告してくるけど
malloc()とfree()をラップするような、いわゆるオブジェクト指向をサポートする言語で言うところのコンストラクタとディストラクタを作っておけば開放漏れは防げるでしょ
再三、連結リストが話題に出ているけど、free()不要と言う人は、時間のかかるプロセスが要素を確保して、開放せずにまた別の要素を確保しつづけるの
プロセスがゾンビ化したらfree()とか関係ないけど
>>769 >ただ、mtraceを通すためだけにfreeするのって
>コンパイラを通すために○○するっていうのと精神に於いて変わらないような。
さすがにその理解力じゃ世の中渡るの辛いだろうな…
領域を使う処理を作ったら、常識に対になる解放する処理も
作るでしょ。それがデータ構造の設計。
コストの問題でプロセス終了前に解放を省くってのはあり得るけど、
解放処理がバグっているってのはあり得ない。正常系だしね。
それは実力が足りていないかテストが足りていないかの問題で、
プロセス終了前の解放を省くこととはまったくの無関係。
free()不要という人はバグが怖いからfree()しないんだそうですよ。
スレッドタイトルを見る限りは、プログラム終了直前のfree() を省くかどうかを問題にしているわけではないからねえ。
>>754 >お前もバカだろ。wwww
自分がバカという自覚はあるようですね?
早く反論しなくちゃとあせってミスするのが得意なようで。
775 :
デフォルトの名無しさん:2013/01/27(日) 15:41:44.16
>>773 主張を捻じ曲げる事でしか反論できなくなった。バカ。wwww
目視で簡単に見破られるバグ乱発しなくなってから出直しな。
テメーのうんこプログラムのバグ片手以上は晒しあげた記憶があるぞ。www
未だにシグナルハンドラバグ入りで絶賛放置中だろ。www
>>774 お前日本語わからない。バカ。www
異常なバカ召喚性能を誇るこのスレに召喚されたバカ共の一部という意味。 www
それより、お前「本日一番のバカ」だろ。↓こいつ www
From: [760] デフォルトの名無しさん <sage>
Date: 2013/01/27(日) 12:54:39.65
>>759-760 バカとしか言えないバカ惨め (w
>>775 > お前「本日一番のバカ」だろ。↓こいつ www
ツボ突いたみたいだな (w
777 :
デフォルトの名無しさん:2013/01/27(日) 15:46:44.28
ラッキーセブンゲットだぜage
778 :
デフォルトの名無しさん:2013/01/27(日) 15:52:38.79
本日一番のバカ www
From: [760] デフォルトの名無しさん <sage>
Date: 2013/01/27(日) 12:54:39.65
>>759-760 バカとしか言えないバカ惨め (w
780 :
デフォルトの名無しさん:2013/01/27(日) 15:58:54.59
本日一番のバカ www
From: [760] デフォルトの名無しさん <sage>
Date: 2013/01/27(日) 12:54:39.65
>>759-760 バカとしか言えないバカ惨め (w
781 :
デフォルトの名無しさん:2013/01/27(日) 15:59:46.89
free不要派の提唱する文脈依存プログラミングとは?
// 起動時に一度しか呼ばれないと思って作った関数
void safe_func(){
malloc(100000);
}
void onTick(){
safe_func(); // 安全な関数だから何回呼んでも問題ないよね まさか中でメモリ確保して放置してるわけがない
}
扱いに細心の注意が必要だった。
>>781 ああ、Win95か98で、アイコンかなんかの小さいGDIを解放していなくて
空きリソースが微妙に減っていってそのうちシステムが落ちるとかいう
バグを思い出した。
783 :
デフォルトの名無しさん:2013/01/27(日) 16:09:28.01
>>781 そんなことこのスレで言ってるのはバカのお前だけ。www
またfreeバカの知能の低さが実証されてしまった。wwww
>>782 Windows7でもGDIリークは健在で
2週間くらい再起動してないとexplorer.exeが上限の9999になるよ
786 :
デフォルトの名無しさん:2013/01/27(日) 16:12:35.77
草男(くさお)は本当にバカだな
理論的なこと言い合っていないで手を動かせよ
free()必要・不要とで実際にプログラム書いてみて、出来を判定すればそれで十分だろ
基準は、実効速度・バグの少なさ・保守性(可読性)とかにして
例えば、Linuxに標準で付いている/usr/share/dict/のwordsをケースインセンシティブに始めの一文字がブレークするごとに、単語の文字数が小さくASCII辞書順に別のファイルに出力するプログラムとか
>>646で既に書いているが。これより簡潔には書けないみたいだよ。www
int main(int argc, char **argv)
{
unsigned long i;
for (i = 0; i < 10000000; i++) {
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
}
// 何か処理
return 0;
}
789 :
デフォルトの名無しさん:2013/01/27(日) 16:37:01.42
ところで気になってしょうがないんだが、「ダブルポインタ」って
底辺用語使ってるC言語の解説書籍はあるのかないのかはっきりしろよ。
>>700 www
790 :
デフォルトの名無しさん:2013/01/27(日) 16:45:41.45
草男(くさお)は本当に必死だな
791 :
デフォルトの名無しさん:2013/01/27(日) 16:58:33.48
ダブルポインタ wwww
ダブルポインタ wwww
ダブルポインタ wwww
ダブルポインタ wwww
ダブルポインタ wwww
793 :
デフォルトの名無しさん:2013/01/27(日) 17:24:21.13
ダブルポインタの出典明らかにしろよ。バカ底辺 www
>>794 困った時のぐぐる頼みwww
だからお前は底辺なんだよwww
>>795 ほんとバカだな。www
実際にはこんなまとめて確保なんかしないだろ。www
常識的には徐々に増えていくものだ。
簡潔な解放処理を例にあげただけだぞ。www
そんなことも読み取れない底辺バカ。www
>>796 根拠出したら反論できなくなってあせりだしたか
バカは大変だな
799 :
デフォルトの名無しさん:2013/01/27(日) 18:53:05.97
>>797 言いたいことも伝えられない発達障害のその脳ミソじゃ
コミュニケーション取れなくて生きるの辛いだろうな
とりあえず晒しとくか
ぐぐるが根拠になると思っているバカ底辺。www
きちんと書籍になっているものを持って来いよ。www
書籍になってない用語は認めん。
馬鹿じゃねーのばーか。
幼稚age
底辺の論文
参考書籍:ぐぐる検索
www
自分で書籍をぐぐれないのか? だからぐぐることを根拠と認めないのか?
https://www.google.co.jp/search?tbm=bks&q="double+pointer"
Object-Oriented Programming With C++ 2ed - 77 ページ
books.google.co.jp/books?isbn=8120336704
Sarang - プレビュー
To access the variable using the double pointer,
Practical .net 2 and C# 2 - 420 ページ
books.google.co.jp/books?isbn=0976613220
Patrick Smacchia - 2006 - プレビュー - 他の版
Here, we talk of a double pointer. For example: long aLong = 98; long * pALong =
もうそろそろ土下座して謝る時が来たようだぜ?
うわ!
なんと1860件も書籍で使われてる例が見つかる!
これって重複ないのか?
検索結果プレビューを見る限り、
同じ本がリストアップされてないようにみえる。
うわっ!こんなに、書籍で使われてる!
806 :
デフォルトの名無しさん:2013/01/27(日) 19:02:36.94
くさおは根拠のない煽りしかできないからしゃーない
全部英語じゃんw 日本語の書籍になってないものは認めん。
>>807 そこでなんで、"ダブルポインタ"で
日本語の書籍を調べようと思わんの?
>>801 お前はぐぐって出てさえすればどんな用語でも通用すると思ってんの?www
底辺が適当に底辺用語を書いたのが拾われているだけかもしれんぞ。www
まさかぐぐって出てきた用語を日常で使ってないよな。www
2ちゃんねる語を日常で使うくらい恥ずかしいことだぞ。www
>>809 ん? 英語の書籍で使われてる用語は
普通に使われていると解釈していいでしょ?
土下座まだ?
>>804 底辺向けの娯楽書籍が引っかかっただけだぞ。www
それらの書籍になんの権威があるんだ。www
まさか根拠に自己出版レベルの娯楽書籍を持ち出すとか、
底辺バカはほんとにバカなんだな。www
底辺向けの書籍に底辺著者が書いていたってことだろ。www
>>719の通り、規格書レベルではまだ見つけられないようだな。www
今の時代はすごいな。
無限といってもいいほどある本の中から
使われてる証拠を簡単に見つけ出すことが出来るんだ。
本当の底辺はてーへんだなw
規格書にない用語を創造して使っている=底辺バカ
この事実は揺るがない。www
まあ「ダブルポインタ」といっても三重、四重なんてざらだしねえ。「トリプルポインタ」とかいわないしねえ。
free() 不要派=バグが怖くてfree()ができない free() 不能派、であることがばれちゃったので他のそこはかとない根拠を求めて日夜努力しているのですね敬服の限りです
あとスレタイ読んでね。
検索することも出来ない、底辺をフルボッコwww
楽しすぎwww
>>821 オライリーwww
底辺の間で結構人気があるらしいね。www
でどこの規格書に由来しているの?www
>>813 > まさか根拠に自己出版レベルの娯楽書籍を持ち出すとか、
「自己出版」なんて用語は認めんwww
>>823 え? オライリー知らないの? そういうレベルの人だね。
「二重のポインタ」という言葉に規格書を要求するって
頭おかしいと思う。
俺はオライリーよりも頭がいいからな。
オライリーの本を神聖化してるのは底辺ぐらい。
慈悲出版だね、kindle ではお手軽にできるんだとか‥‥「私のデスマ体験」とかだったら売れるかなあ‥‥
>>825 オライリーよりも・・・頭がいい?
オライリーは人の名前じゃないよ。
828 :
デフォルトの名無しさん:2013/01/27(日) 19:52:58.47
>>828 wiki answersを信用してどうするの?w
831 :
828:2013/01/27(日) 20:03:07.86
>>829 wiki.answersしらんの?
wikipedia作った人が、wikipediaと同じ概念で作った
wikiと同じように信頼出来る、
だれでも投稿できるFAQシステムなんだけど?
>>828 その回答を書いた、 Avsharathってだれなん?
どれくらい権威がある人?
素人にしか見えないんだが、書籍に対抗させようと
してるぐらいだ、書籍以上の何かを
お前は示せるんだろう?
833 :
デフォルトの名無しさん:2013/01/27(日) 20:27:16.68
「ダブルポインタ」という誤用が主に底辺バカの間で使われている事は知っている。だから、
> * 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
と言ったわけだが、C(C++でもいいけど)言語解説書籍が一つも出てこないな。
検索しか能の無いバカ底辺が必死で探して出てこないって事は、やっぱ無いんじゃないの。 www
言葉ってのは、誰かが作り出すこともあれば
自然と生まれることもあるんだよ。
間違った使い方(つまり正しい使い方が存在する)ものは誤用でいいが、
新しく生まれた言葉は誤用にはならない。
これだけ多くの本で使われてる言葉だ。
一体お前は何を求めているのだ?
ダブルポインタとはC言語の用語ではなく
ポインタがある言語共通のプログラミング用語だよ。
836 :
769:2013/01/27(日) 21:09:30.18
>>771 どいういうこと?
理解力のない自分に教えていただきたい。
終了直前のfreeの意義って
mtraceにで警告でないようにする、
社内規定がそうなっている、(上のK社のもしもし向けアプリの話とか)
以外にあるのかな ?
わかってて書くmtraceを通すためのfreeとそうでないコンパイラを通すための
○○ではわかってるかどうかがちがうというなら、書き方が悪かった。
837 :
デフォルトの名無しさん:2013/01/27(日) 21:20:24.08
NI GE TA
逃げてないしw
ダブルポインタって書いてある、底辺向け以外の本はまだ?
評価が高い本でも、底辺向け本はいくら集めても無駄だよ。
839 :
デフォルトの名無しさん:2013/01/27(日) 21:23:04.42
>>834 つまり、必死で探したけどなかったってわけね。www
>>835 > ポインタがある言語共通のプログラミング用語だよ。
って、Cから派生した以外の言語でポインタのポインタが使えるのってどれだよ。
書いてある本が沢山見つかる
↓
評価が高い本にも書いてある。
↓
くやしい
↓
そんな本は全部糞だ。底辺向けの本なんだ。
↓
発作おさまる。
841 :
デフォルトの名無しさん:2013/01/27(日) 21:37:46.97
>>795 やっぱりヘボだ。wwww
> 確保は線形的、解放は再帰的かいな?
確保時のforは列挙だろ。バカヘボ。 www
while (gets(s)) add_str(s, top);
論理的には同じ。 これでadd_treeが再帰で書かれていても「確保は線形」とかいうのか? バカすぎる www
842 :
デフォルトの名無しさん:2013/01/27(日) 21:41:19.80
検索しか能がねーんだから とっとと↓これ探せよ。底辺バカ。 www
> * 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
844 :
デフォルトの名無しさん:2013/01/27(日) 21:50:15.12
>>843 > * 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
それOopの解説書。バカにはわからないらしい。wwww
OOP(C++)の解説書に、ダブルポインタという用語が使われていた
↓
どうしよう!
↓
発作再開
これがアスペというやつか
848 :
デフォルトの名無しさん:2013/01/27(日) 22:03:46.26
どんなにwwwがスレを流そうとしても、
freeの処理がうまくつくれなくてバグりそうだからfreeいらないと
いっていた事実からは逃れられない!
851 :
デフォルトの名無しさん:2013/01/27(日) 22:08:06.07
>>850 いつそんな事いった? ねつ造すんじゃねーぞ。バカ。wwww
「連結リスト構造の解放処理のダブルポインタ」が話題に出てきた瞬間から
顔真っ赤にして発狂してるのはなぜですか?
トラウマだからですか?理解できないからですか?
853 :
デフォルトの名無しさん:2013/01/27(日) 22:14:34.48
宿題ちゃんとやれよ。底辺バカ。www バカはもう忘れてるらしいから再掲してやる。wwww
free必須バカはまず以下に回答するように。 wwww
* 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
* 解放処理楽勝と豪語しているバカは下の確保処理より簡単に書け。
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
バカだから出来るわけないよね。www
>>852 「ダブルポインタ」って言われて「double *」と勘違いして作って
怒られた経験があるんだよ。その時いくら規格書を持って反論しても
聞いてもらえなくて、俺のほうが全然優秀なのに笑いものにされてしまった
つらい過去があるんだよ。www
855 :
デフォルトの名無しさん:2013/01/27(日) 22:17:40.67
>>852 「ダブルポインタ」は「ダブルポインタが無い言語は欠陥言語」とか言ってるバカがいて
その言葉を見るだけで腹がよじれるほど笑うので過剰反応になるのはしょうがない。www
856 :
デフォルトの名無しさん:2013/01/27(日) 23:25:43.36
くさお得意の不利になるとうやむやにする作戦決行中
まあいいけどな
857 :
デフォルトの名無しさん:2013/01/27(日) 23:32:19.80
宿題も満足にできない癖に優位にたってると思ってんの? さすが底辺バカ wwww
もう一回貼ってやるよ。 宿題ちゃんとやれよ。底辺バカ。www
free必須バカはまず以下に回答するように。 wwww
* 「ダブルポインタ」とかいう底辺用語を使用しているC言語解説書籍を示せ。
* 解放処理楽勝と豪語しているバカは下の確保処理より簡単に書け。
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
バカだから出来るわけないよね。www
858 :
デフォルトの名無しさん:2013/01/27(日) 23:45:37.13
ワラ
fjのときよりひどい気がする。
人間の進歩って難しいね。
可哀想になって
>>856が譲歩してまぁいいけどなと言ってるのに
自分で墓穴堀り返すのは趣味なのか
当然、リスト構造を丸ごと削除する処理は関数にするんだよな?
「短く書け」だから速度も要求してないようだし、2行で書けるんでないか
void free_l(struct l *p) {
if(p && p->next) free_l(p->next);
else free(p);
}
ごめん間違えたバグってるわwwwww
>>841 列挙的だろーが線形的だろーが意味するところはおんなじだろう?
言葉尻を捕らえて差異があるかのように大騒ぎするのはもうやめようね
866 :
デフォルトの名無しさん:2013/01/28(月) 08:10:01.52
>>861 free楽勝とか豪語しているのは底辺バカという事が実証されたようだな。wwww
お題「簡単に書け」を「短くかけ」とか勝手に変更したうえ、お題には無かった
「判定」操作を加えて複雑にした上に、バグ作りこんでる。 wwwww
バカの極み。wwwww
>>865 やっぱりバカだ。www
free_lはデータ構造に対する操作。forは入力データに対する操作。
free_lと対比させるなら、データ構造に対する(insert)操作ということになるが、
これは無名のブロック
{ struct l *p = malloc(sizeof(struct l)); p->next = root; root = p; }
が該当する。そしてこれは先頭に追加していくので再帰構造にする必要が無い。
下らねーことに言いがかり付けてんじゃねーよ。チンカス。
Cにも参照カウントベースのスマートポインタを実装できないものかな。
やっぱテンプレート使えないと面倒かね。
Cのプリプロセスだけ使うオプションみたいに、
C++のテンプレートまで処理を行うオプションないのかな。
Objective-CのAutoReleasePoolならCでも実装できるんじゃないかな?
C++のスマートポインタはできるのかどうかわからんけど、演算子
オーバーロードがないから似ても似つかないものになりそう。
????
struct l *p = root;
root = p ? p->next : p;
free(p);
struct l *p = root;
root = p ? p->next : NUL;
free(p);
>>866 まずスレッドタイトル嫁。プロセス終了直前にfree() が必要かどうかを論じるスレではない。
>そしてこれは先頭に追加していくので再帰構造にする必要が無い。
解放のときも同じく先頭から解放していけばよく再帰構造にする必要は皆無なのに、どうしてわざわざ再帰にする?ミスリードを狙っているのか?
http://ideone.com/h1Gjuh $ time ./baka
real 0m0.919s
user 0m0.046s
sys 0m0.015s
$ time ./baka 1
real 0m1.641s
user 0m1.497s
sys 0m0.108s
$ time ./baka 1 2
real 0m0.871s
user 0m0.779s
sys 0m0.062s
再帰のオーバーヘッドは馬鹿にならないね。
872 :
デフォルトの名無しさん:2013/01/29(火) 09:41:31.20
スレタイに逆らって、いかなる場合でもfreeしろって騒いでるバカの筆頭が何ほざいてるんだ。www
>>872 お前日本語が読めないのか?
信者は
>>1 に基本的に賛同する、ただし信者らしく極端なだけ。
874 :
デフォルトの名無しさん:2013/01/29(火) 12:37:44.50
バカがうるさいので書き直してやるよ。www
void free_l(struct l * restrict p) {
struct l *next = p->next;
free(p);
if (next)
free_l(next);
}
バカのいいがかりなんて所詮この程度の事。 バカには意味わからないだろうけどな。www
いくつ連結されるかわからないリスト構造を再帰で解放するのは
キチガイのやることです
ここでwwwさんに問題です
天才には簡単な問題ですので必ず逃げないで答えてください
スタックサイズが8MBのとき、このfree_l関数で解放可能な連結リストは
最大何個連結可能でしょうか?
アーキテクチャは好きに選んでいいですよ
質問です。再帰を使わない
void free_l(struct l *pp) {
for (struct l *p = pp; p; p = pp) {
pp = p->pNext;
free (p);
}
}
は正しいでしょうか?
879 :
デフォルトの名無しさん:2013/01/29(火) 14:21:00.03
>>876 予想通りバカにはわかっていない。 wwww
予想通りの敗北宣言ありがとうございます
881 :
デフォルトの名無しさん:2013/01/29(火) 14:33:48.54
予想通りのバカ。wwww
もういいですよ
顔真っ赤にして罵倒して逃げることしかできない朝鮮人のような
あなたを見ることができて、私は満足しましたから
883 :
デフォルトの名無しさん:2013/01/29(火) 14:38:37.80
「ダブルポインタ」のソースで負けて、
解放処理を簡単に書くコンテストで負けて。しかも参加者はみんなバグってるというおまけつき。 wwww
>>874を理解せずに勝利宣言。 wwwww
生きてくのつらくないか? 底辺バカ wwww
別にちゃんと
>>867を答えてもらってもいいですよ
答えられるならばの話ですけど
885 :
デフォルトの名無しさん:2013/01/29(火) 14:42:41.02
>>884 制限なし。www
これでいいのか。 www
>>874 スレ違いで申し訳ない質問です。
> void free_l(struct l * restrict p) {
引数1個で restrict って効果ありますか?
>>886 ああ、コピペの時の単なるゴミだ。 意味ないね。
888 :
デフォルトの名無しさん:2013/01/29(火) 15:11:31.24
>>884 なんだよ。バカに釣られて答えちまったぜ。 wwww
>>867 > Cにも参照カウントベースのスマートポインタを実装できないものかな。
> やっぱテンプレート使えないと面倒かね。
>
> Cのプリプロセスだけ使うオプションみたいに、
> C++のテンプレートまで処理を行うオプションないのかな。
能無しだとは思っていたが、まさかアンカーすらまともにうてないとは予想の斜め上だったぜ。 www
>>885は
>>876への回答な。 wwww
息してるか? バカ。wwww
すいません、笑いすぎて息でなくて、笑い死にしそうになっていました
890 :
デフォルトの名無しさん:2013/01/29(火) 15:24:04.07
>>887さん、。wwwwの人ですか?
回答ありがとう。コピペミス了解。
(出来れば見分けやすいよう、行末に「。 wwww」を付けてくださいw)
892 :
デフォルトの名無しさん:2013/01/29(火) 15:30:30.12
お、証明までしてもらっちゃってありがとうございます
さすが天才のwwwさんですね
スレを開いてみたら、予想以上のバカスレだった
バカが作った危険なソースをコンパイラががんばって最適化してくれただけじゃん。
896 :
デフォルトの名無しさん:2013/01/29(火) 16:02:26.60
ここまで俺の自演
ここから俺の自演
897 :
デフォルトの名無しさん:2013/01/29(火) 16:07:24.29
>>895 >>874で警告しといてあげたのに。wwwww
> バカのいいがかりなんて所詮この程度の事。 バカには意味わからないだろうけどな。www
やっぱり、バカにはわからなかったようだね。コンパイラ程度の知能があればよかったのにね wwww
ところで
>>876の回答
>>885はあってんの? 出題者は採点しろよ。 wwww
全くの第三者だけど、
>>874は再帰でスタックを少しずつ消費するから、無限ってことはないんじゃないの?
それとも、*nextはスタックを消費しないってこと?
899 :
デフォルトの名無しさん:2013/01/29(火) 16:39:16.63
>>874は末尾再帰と呼ばれる形式で、機械的に反復形式に最適化できる。
証拠 →
http://pastebin.com/4pBPEWBGの該当部分 .LBB0_1: # %tailrecurse
# =>This Inner Loop Header: Depth=1
movq (%rdi), %rbx
callq free
testq %rbx, %rbx
movq %rbx, %rdi
jne .LBB0_1
全くスタックは消費していない。rdiがfree_lへの引数(p), rbxがnextだな。
せっかく↓警告しといてあげたのにね。
> バカのいいがかりなんて所詮この程度の事。 バカには意味わからないだろうけどな。www
900 :
デフォルトの名無しさん:2013/01/29(火) 16:49:15.78
処理系依存を前提にされても
901 :
デフォルトの名無しさん:2013/01/29(火) 16:59:41.77
>>874は機械的に最適化できる単純な事に必死に絡んでるQzをあざけ笑う事が目的だからな。www
予定外のバカも釣れたようだが。www
問題に答えたんだからとっとと採点しろよ。 バカ。wwww
で末尾再帰が常にループに最適化されるというのは
どの規格書に書いてあるの?
釣れないから自演を恥めたのか
憐れすぎる
904 :
デフォルトの名無しさん:2013/01/29(火) 17:15:21.16
>>902 Qzやお前らのようなバカより頭のいいコンパイラが存在する事を示せればそれで十分。wwww
コンパイラより劣る脳しか持ってないバカはコンパイラの奴隷やってろ。 wwww
>>903 おら、とっとと採点しろよ。 wwww
仕込んだ餌が発動して良かったね(棒)
906 :
デフォルトの名無しさん:2013/01/29(火) 17:20:52.57
バカ入れ食い。 wwwww
採点まだ〜〜〜〜? www
じゃあ30点あげましょう
908 :
デフォルトの名無しさん:2013/01/29(火) 18:10:05.87
>>876 気負いこんでかかってきたのに、あっさり撃退されちゃった気分はどう? wwww
バカみじめすぎる。wwww
このバカが憤死したら下らねーことに粘着したてめーの責任だ。うんこQz てめーも殉死しろ。
もちろん実験して答えを確認してからレスしていますので
この展開は予想済みです
末尾再帰という言葉をちゃんと知っていたのはちょっと予想外でした
意味は完全には理解しきれていないようですけどね
言葉と経験則的に理解しているというところでしょうか
実験しなきゃ答えがわからなかった時点で底辺バカ確定。www
関数コールは少なくとも戻りアドレスのためにスタック食いますよね…
root == NULL のときに free_l(root) でクラッシュする
ゴミコードで勝ち誇っている
>>874がいるスレはここですか?
>>874みたいなコード書いてりゃ、そりゃfreeすべきでないと言い出すわな
いつクラッシュするか分からんから
一方向のリストの解放くらいでバグっちゃう怖い怖い言ってるレベルの人ですから。
とんだバグ野郎でしたね
俺みたいにこんな幼稚なバグ作っちゃうかもしれないからfreeはしないほうがいい、ってことか。
体を張ってんな。
こんなバグ作るのこいつくらいだけど。
918 :
デフォルトの名無しさん:2013/01/29(火) 21:33:23.31
>>910 末尾再帰もしらないで向かってきた
>>876をほめてやれ。wwww
>>914 free_lの中でいちいち比較するのは無駄なので、普通はfree_lを呼び出すラッパを作って
それで確認する。今回はNULLじゃない事が保証されてるので全部省略。
バカだね。 それくらいわかれよ。 wwww
>>915 必死で向かってきたバカのお友達はみんな討死しているぞ。
>>861とか。wwww
本日のバカ一番は
>>876。 明日は誰だろう。wwww
ほめてやれって、それお前の自演だろ。
というか自演下手だな。そんなにスムーズに流れたら誰だってわかるぞ。
自演かどうかはともかく、この展開は読めていたぞw
921 :
デフォルトの名無しさん:2013/01/29(火) 21:54:04.93
おーぃ。
>>876 お前がバカ杉で見事に引っかかったから自演だと思われてるぞ。 www
まだ生きてるか? wwww 憤死してもおかしくないよなあ。wwww
922 :
デフォルトの名無しさん:2013/01/29(火) 21:58:11.43
あんな言いがかりつけるって事はうんこQzも末尾再帰しらないよなあ。 wwww
それとも、
>>876を陥れるためにうんこQzが仕組んだ罠だとでも? wwww
>今回はNULLじゃない事が保証されてるので
でたよ得意の思い込み
>>923 突っ込まれたら急きょ前提条件を付け加えて
「そんな前提条件すら気づかないバカ。www」
とレスするだけの簡単なお仕事です。
どうせ再帰して解放する際にはroot->next以降はNULLチェックが必要なのに
rootだけNULLチェック飛ばす意味ねーだろ馬鹿か
まあwwwも勝ってるつもりみたいだし、
Win-Winのいい関係じゃないか。
927 :
デフォルトの名無しさん:2013/01/29(火) 22:03:53.36
そのように作ってあるだろ。www
NULLになるパスが存在するとでも。 wwww
#define FREE_L(a) if(a) free_l(a)
というラッパを作るってこと?
確かに期待通りに動くけど、それってfree_lのバグをごまかしてるだけじゃん。
>>925 エラーチェックのNULL判定とリスト終端NULL判定は意味合いが違わないかな?
覚えたての末尾再帰を披露したくて大事なとこが抜けたんだろ
lisperから言わせて貰うと がんばれ
931 :
デフォルトの名無しさん:2013/01/29(火) 22:12:21.95
>>925 rootはNULLじゃない事が確定している。よって省略。 わかる? バカにはわかんないかな wwww
932 :
デフォルトの名無しさん:2013/01/29(火) 22:14:40.08
w
というか、スタックオーバーフローするかもしれない致命的な実装のミスを
コンパイラの最適化がたまたま勝手に修正してくれただけで、
コンパイラやオプション次第ではスタックオーバーフローする危険なソースで
あることには変わりない。
for (i = 0; i < n; i++) {
struct l *p = malloc(sizeof(struct l));
p->next = root;
root = p;
}
こんな感じにループ回数を変数nに一般化したあと、
n < 1 な値が入ってきたときにバグが顕在化するんですね。
forのループ条件を0との比較になるようにロジックを書けない時点で素人
sizeof(struct l)
これも素人くさい
プロなら
sizeof(*p)
だな
937 :
デフォルトの名無しさん:2013/01/29(火) 22:25:44.87
>>933 何故わざわざと再帰にしたか考えてみな。wwww
わからないだろうな。バカには wwwww
なんか謎の文字列もついてるし。 wwww
938 :
デフォルトの名無しさん:2013/01/29(火) 22:26:08.19
くさおが追い詰められて「www」を付けずにレスしてるぞ
ここまでのまとめ
・freeいる派完全勝利
・freeいらない派のくさおが発狂、レスを流すのに必死
940 :
デフォルトの名無しさん:2013/01/29(火) 22:29:28.16
バカ必死。 wwww
教祖のうんこQzすらfreeしなくていいと日和ってるぞ。wwww
941 :
デフォルトの名無しさん:2013/01/29(火) 22:32:59.10
んじゃ、このバカの釣堀の次スレ立てといてね。 バカの諸君。 wwww
942 :
デフォルトの名無しさん:2013/01/29(火) 22:33:35.33
mtraceが通らないソースは納品できないし、
無駄に再帰しているソースはレビューすら通らない。
これが現実。
944 :
デフォルトの名無しさん:2013/01/29(火) 22:36:02.37
雲行きが怪しくなったのでくさおは逃げましたとさ。
おしまい。
>>871 > まずスレッドタイトル嫁。プロセス終了直前にfree() が必要かどうかを
> 論じるスレではない。
まぁでも、main以外と書いてあるし、main以外のexit前ならなんとか
スレの範疇かと。
このスレにはプロセス終了直前のfreeは無駄なごみでしかないってことを
理解できない方もいらっしゃるみたいだし。
QZ...ですらプロセス終了直前のfreeは必要ないって思っているってことでいい ?
再帰のオーバーヘッドが大きいって行ってるけど、
それを含めて無駄な解放の、後始末のコストなんじゃない ?
今回の例はあくまで簡潔な例として作られたもので、
例えばn個の枝を持つツリー構造だったら再帰でやっちゃうわけで
再帰で書けば自然なのをわざわざループに書き直すことを考えたら
自明に消せれるfreeは最初っから書かなきゃいいじゃんって思うんだけど。
あと、再帰のオーバーヘッドが消せようがなんだろうが無駄なfreeのコストは
ゼロじゃない。
ただ単に無駄なコストなのに。
そもそも最後にまとめて解放すればいいという設計がおかしいんだよ。
最後にまとめて解放するくらいならプロセスの終了に任せれば、って
話になるのはそのため。
mtraceの話も出てるけど、リストだろうがツリーだろうが、使っていると
認識している箇所だけを正しく解放していって、最後に何が残るかを
見ないとリークしてるかどうかなんてわからないだろ。
最後にツリーまとめて消してみたら全部消えたのでリークしてません、
なんてことにはならないんだから。
そこに解放したつもりになっているデータが連結されているかどうか
というのが重要なのに。
こりゃまた大きな釣り針だな。www
948 :
デフォルトの名無しさん:2013/01/29(火) 22:47:30.66
くさお悔しくて絶好調だな
>>946 まとめて消して消えるならリークしてないだろ。バカか。
>>946 > そもそも最後にまとめて解放すればいいという設計がおかしいんだよ。
そうは言っても本質的にプロセスの最後まで持ち続けてるデータだって
あるんだもん。
こういう場合はどうかな ?
画像の色調を変化させたり、輪郭を抽出したり、そういうソフトで
ワーキングエリアにデータを入れてるとして、ユーザが終了を指示したとき
いちいち、mallocした領域をfreeしてから終了する ?
951 :
デフォルトの名無しさん:2013/01/29(火) 23:13:25.53
します。しないと可搬性が低下します。
>>950 その手のソフトなら、アンドゥ実装したり、起動したまま今のファイルを捨てて、
違うファイルを読み込んだりするだろうから、どうせ領域解放の処理は必要になる。
でかいファイルを読み込んで終了させた時に、解放にとんでもなく時間がかかってる
と言うのがわかればあえて解放しないようにするかもしれないけど、まずは普通に
解放するように作る。
そもそもそういう状況なら、読み込みはもっと時間かかってるはずだし。
お前らmalloc/free好きだなあ
fj思い出したわw
mallocをやめてrealloc
freeをやめてreallocにすればいんじゃね?
規模の大きいソフトなら独自で個別のヒープを持つか
ObjectiveCのNSなんとかPoolみたいなので一括解放させる。
そのままlibcのmalloc/freeスタイルでやるとかない。
ここまでのまとめ
・freeいる派完全勝利
・freeいらない派のくさおが発狂、レスを流すのに必死
・freeいらない派のくさおがバグ付スタックオーバフローソースを作成、
身をもってfreeは危険だと主張
・freeいらない派のくさおが自演を開始、自画自賛を始める
・freeいらない派のくさおが自演を指摘され遁走 ←いまここ
958 :
950:2013/01/30(水) 21:41:16.97
959 :
950:2013/01/30(水) 21:54:05.58
>>951 >>953 了解した。
>>954 自転車置き場の屋根だったっけ?
そんな感じのもんだいだからじゃない ?
リークさせちゃいけないってのは大前提なはずだし、
exit前のfreeを書くか書かないかなんてスタイルの問題で
どっちでもいいことじゃん
960 :
デフォルトの名無しさん:2013/01/30(水) 23:20:27.27
>>953 ソース出せというので出してやったのに。読めないバカですな。www
たとえばemacs。 解放処理は実装してるけど、終了時の解放なんかしてない。
>>957 かなり悔しかったようだな。
>>876 だから忠告してやったのに。wwww
一日経った今でも爆笑。 wwwwww
> From: [876] デフォルトの名無しさん <sage>
> Date: 2013/01/29(火) 12:58:33.48
>
> ここでwwwさんに問題です
> 天才には簡単な問題ですので必ず逃げないで答えてください
>
> スタックサイズが8MBのとき、このfree_l関数で解放可能な連結リストは
> 最大何個連結可能でしょうか?
>
> アーキテクチャは好きに選んでいいですよ
>>960 953さんは個人の方針を書いただけでしょう。
ソースを出せと言った方とは別の人では?
あまり攻撃的な書き方は感心できませんよ。
巨大なheapを自前で管理できるなら、終了時の開放時間なんて一瞬のような
>>958 立て乙
しかしmain以外削除に悪意を感じる
964 :
950:2013/01/31(木) 00:45:05.16
>>963 すまん。
Part2と入れるためにはどこか削除しなくてはならなかったんだ。
「malloc/free問題」とかスレタイを全く変えようかとも思ったんだが
なるべく前スレの雰囲気を残したかったし、刺激的なタイトルの方が
いいかなとも思い「mallocの後にfree不要と言うバカいるの?」というのは
そのまま残しました。
で、元スレの1さんの「main以外」っていう思いは元スレの1を最初のほうに
貼り付ければ、読んでくれるかな。と思いこうしました。
もたもたして2getできなくてすみません。
個人的にはこの「main以外」っていうのは非常に重要な要素で、
元スレの1さんは多分この手の議論はfjなりで経験していて、
exit前のfreeガーってのは既に考慮して、「main以外」なり
「例外中の例外は除く」になったんだと思う。
個人的には、その「例外中の例外」とはなんなのか、
その「例外」とされるものをどういう立場の人がどういう考えで
「例外」として扱うのか、扱わないのかが知りたいと思っている所存です。
でも、そんなスレ立ティストの思いにスレが左右されないように、
できるだけ中立的になるように立てたつもりですが、
お気に召さなかったら申し訳ありません。
ダメだよ。
削除して立てなおさないと
966 :
デフォルトの名無しさん:2013/01/31(木) 07:51:08.33
mainを例外扱いするのはmainはexitするからに他ならない。
ところがmain以外でもexitを呼ぶことは可能。
したがって「main以外」とするのは不適切。
mallocを抜いたのは文字数制限
ご都合主義のおぼっちゃまくんか。
人命に関わるシステムにご都合主義持ち込まれると迷惑だから。。
970 :
デフォルトの名無しさん:2013/01/31(木) 10:47:17.33
人命に関わるシステムだとmain以外ではfreeしなけりゃいけないのか? wwww
どういう理論だよ。 wwww
人命云々言い出すとそもそもmallocを使うこと自体が
例えばMISRA-Cに触れるとか
972 :
デフォルトの名無しさん:2013/02/04(月) 15:53:57.74
つうか、mew/deleteじゃない時点で放置
mew〈猫が〉ニャーと鳴く
久しぶり〜 ぬこちゃんは強くなったかな?
へ-ヘ
ミ*´ー`ミ
〜(,_uuノ
つか、メモリー確保する為に、malloc/newを使う時に、
Linux/Windowsで、同じ動作をするのかね?
仮に、malloc(0)とした場合、動作が異なるしね。
Linuxだと、nullが返るけど、Windowsなら、nullじゃない。
これが、何十万回も呼ばれ、かつ、連続稼働するようなシステムでも
freeが不要なのか?
環境依存、コンパイラの仕様を把握した上での議論なのか?
なんか、スレの流れからすると違和感があるのだけど?
あと、OSが32/64bitなのか明確じゃないし。
プロセスが確保できる上限値に至る可能性がある要求があった場合の
考慮も欠如している。
それでも、free()は、不要なのか?
他にfreeした領域を指してるポインタがあったらどっかーん
>>976 それよりは、freeしないでおいて、メモリ不足になった方がマシ。
…ってこと?
参照カウンタ、ですか、めんどくさいなあ
>>975 > これが、何十万回も呼ばれ、かつ、連続稼働するようなシステムでも
> freeが不要なのか?
freeが全く必要ないって言っている人はほとんどいないと思う。
議論になっているのはexit直前のfreeのように
あっても全く影響のないフリーを書くべきかどうかということ。
> 環境依存、コンパイラの仕様を把握した上での議論なのか?
特に規定はされていない。
なので、Unix or Windows用に書いたプログラムを組み込み用に
移植するから・・・という話も出てくる。
それはそれで実り多い議論だと思う。
> あと、OSが32/64bitなのか明確じゃないし。
それは何か違いが出てくるのだろうか ?
浅学なので教えてほしい。
> プロセスが確保できる上限値に至る可能性がある要求があった場合の
> 考慮も欠如している。
そのことが議論になっていないのは、そうなる前にfreeしろってのが
自明だからだと思う。
> それでも、free()は、不要なのか?
個人的な意見だがfreeは必要でない*場合もある*と思う。