fjの時代から10年以上に渡るmalloc/free問題について語ってください(^q^)
前スレ
main以外★mallocの後にfree不要と言うバカいるの?
http://toro.2ch.net/test/read.cgi/tech/1352812333/
探検
mallocの後にfree不要と言うバカいるの?Part2
■ このスレッドは過去ログ倉庫に格納されています
2013/01/30(水) 21:38:37.44
455デフォルトの名無しさん
2014/10/13(月) 18:52:40.24ID:BlK6LuSG プログラムの再利用性、安全性を真剣に考えると、RAIIは有効な手法。
これに反対するのは雑魚。
Linuxを使わないことも大事。
Linuxはファイルのコピーすら満足にできないって>>297が述べてる。
これに反対するのは雑魚。
Linuxを使わないことも大事。
Linuxはファイルのコピーすら満足にできないって>>297が述べてる。
456デフォルトの名無しさん
2014/10/13(月) 18:59:10.36ID:MgPuSkFo >>297のケースで有効な解法はメモリプール
これがわからない奴は雑魚
これがわからない奴は雑魚
457デフォルトの名無しさん
2014/10/13(月) 19:06:21.99ID:MgPuSkFo458デフォルトの名無しさん
2014/10/13(月) 19:15:48.89ID:BlK6LuSG459448
2014/10/13(月) 19:19:27.66ID:XfBY1GST >>454
認識が確認できて幸いです。
わざわざそんなケースと言われるけど、
このようなケースは結構多いと思うんですよ。
普段使ってるgccもたぶんそうだし、
cpだってそう。
本質的に記憶領域の再利用がされないfreeをするために
循環参照があるリンクトリストを再帰で開放してまわったり
freeをするための1万回のループをわざわざ書くというのは
なんというか、知的ではないのではないかと
もちろん、ライブラリ化するために、解放処理を記述するのは
必要ですけど、例えばgccの構文木を保持するコードは
gcc以外に使えるとは思えないなぁ。
だから、専用に作ったんでしょ
認識が確認できて幸いです。
わざわざそんなケースと言われるけど、
このようなケースは結構多いと思うんですよ。
普段使ってるgccもたぶんそうだし、
cpだってそう。
本質的に記憶領域の再利用がされないfreeをするために
循環参照があるリンクトリストを再帰で開放してまわったり
freeをするための1万回のループをわざわざ書くというのは
なんというか、知的ではないのではないかと
もちろん、ライブラリ化するために、解放処理を記述するのは
必要ですけど、例えばgccの構文木を保持するコードは
gcc以外に使えるとは思えないなぁ。
だから、専用に作ったんでしょ
460デフォルトの名無しさん
2014/10/13(月) 19:24:40.28ID:PPv6Llzm 変な論法だね‥
「free()/delete してもしなくても状況に大きな変化はない。∴free()/delete しなくてよい。」
と理解していいのかな?
「free()/delete してもしなくても状況に大きな変化はない。∴free()/delete しなくてよい。」
と理解していいのかな?
461デフォルトの名無しさん
2014/10/13(月) 19:27:50.10ID:BlK6LuSG >>459
Linux界隈だとそれでいいんですけどね。
ctagsでインテリセンスより強いとか言ってればいい。
でも、いまどきの人は構文上の誤りは即座に指摘してほしいし、書く端から
補完が効いてほしいですよね。
すると、コンパイラの機能だと思われていたものすらエディタに組み込まれたりするわけですよ。
まあ、Linuxなんか使ってると20年前で時が止まっちゃうんですけどね。
世間ではそういうのを雑魚って言うんです。
Linux界隈だとそれでいいんですけどね。
ctagsでインテリセンスより強いとか言ってればいい。
でも、いまどきの人は構文上の誤りは即座に指摘してほしいし、書く端から
補完が効いてほしいですよね。
すると、コンパイラの機能だと思われていたものすらエディタに組み込まれたりするわけですよ。
まあ、Linuxなんか使ってると20年前で時が止まっちゃうんですけどね。
世間ではそういうのを雑魚って言うんです。
462デフォルトの名無しさん
2014/10/13(月) 19:32:32.92ID:XfBY1GST >>456
その解法がメモリープールというのは、
ハッシュテーブルの領域全体をmallocでとって来て
中身を自前のメモリ管理コードで管理して、
解放するときは全体をfree一発で解放ってことでしょうか ?
malloc-freeはsbrkやmmapで確保した領域を
管理するメモリプールだと考えられます。
ですので、再利用する見込みのない領域をわざわざfreeする必要は
ないんじゃないのって考え方は、
上記の大きな記憶領域を確保して、解放はfree一発というものと
同一になります。
その解法がメモリープールというのは、
ハッシュテーブルの領域全体をmallocでとって来て
中身を自前のメモリ管理コードで管理して、
解放するときは全体をfree一発で解放ってことでしょうか ?
malloc-freeはsbrkやmmapで確保した領域を
管理するメモリプールだと考えられます。
ですので、再利用する見込みのない領域をわざわざfreeする必要は
ないんじゃないのって考え方は、
上記の大きな記憶領域を確保して、解放はfree一発というものと
同一になります。
463デフォルトの名無しさん
2014/10/13(月) 19:36:18.84ID:xQhnOcQ3464デフォルトの名無しさん
2014/10/13(月) 19:39:14.34ID:BlK6LuSG465デフォルトの名無しさん
2014/10/13(月) 19:40:18.64ID:BlK6LuSG >>463
関係ないと思うなら、もう少し勉強しましょう。
関係ないと思うなら、もう少し勉強しましょう。
466デフォルトの名無しさん
2014/10/13(月) 19:43:33.90ID:7i+sJhXA >>459
> このようなケースは結構多いと思うんですよ。
自分が作るソフトもそうなの?
まあ、そうだとしても構文木を作成してる所以外でリークしない自信があるとか、リークしても気にしないと言うなら止めないよので、自由にやってくださいな。
> このようなケースは結構多いと思うんですよ。
自分が作るソフトもそうなの?
まあ、そうだとしても構文木を作成してる所以外でリークしない自信があるとか、リークしても気にしないと言うなら止めないよので、自由にやってくださいな。
467デフォルトの名無しさん
2014/10/13(月) 19:44:39.36ID:HMQ6z8sD >本質的に記憶領域の再利用がされないfreeをするために
>循環参照があるリンクトリストを再帰で開放してまわったり
>freeをするための1万回のループをわざわざ書くというのは
>なんというか、知的ではないのではないかと
リスト要素の構築と破棄を一回書けばそれが何万回呼ばれようと
同じだと思うんだが、それを「わざわざ」と言うのはどういうスタイルで
書いてんのか気になるな。
循環参照とか言っているところを見ると、fjのときも出てきたような
「作った本人が正しく破棄することができないデータ構造」とかかねぇ。
>循環参照があるリンクトリストを再帰で開放してまわったり
>freeをするための1万回のループをわざわざ書くというのは
>なんというか、知的ではないのではないかと
リスト要素の構築と破棄を一回書けばそれが何万回呼ばれようと
同じだと思うんだが、それを「わざわざ」と言うのはどういうスタイルで
書いてんのか気になるな。
循環参照とか言っているところを見ると、fjのときも出てきたような
「作った本人が正しく破棄することができないデータ構造」とかかねぇ。
468デフォルトの名無しさん
2014/10/13(月) 19:47:00.34ID:BlK6LuSG RAIIはおろかな考えというネタでもう一スレ作れそうな気がするな。
469デフォルトの名無しさん
2014/10/13(月) 20:12:51.45ID:xQhnOcQ3 >>467
> リスト要素の構築と破棄を一回書けばそれが何万回呼ばれようと
> 同じだと思うんだが、
パフォーマンス的には全然同じじゃないよ
コードの字面的に呼び出しが無かったら処理が存在しないとでも思ってるの?馬鹿?
> リスト要素の構築と破棄を一回書けばそれが何万回呼ばれようと
> 同じだと思うんだが、
パフォーマンス的には全然同じじゃないよ
コードの字面的に呼び出しが無かったら処理が存在しないとでも思ってるの?馬鹿?
470デフォルトの名無しさん
2014/10/13(月) 20:25:00.67ID:BlK6LuSG471デフォルトの名無しさん
2014/10/13(月) 20:36:14.64ID:FVrYA5zE リンクドリストの場合はmallocすら何回もするのがめんどくさいので、
ブロックで確保して破棄はブロックの数分だけでいいのでは?
ゲームでは常識。
ブロックで確保して破棄はブロックの数分だけでいいのでは?
ゲームでは常識。
472458
2014/10/13(月) 20:39:23.78ID:XfBY1GST >>467
わかりにくい書き方ですみません。
前半の部分は
http://www.slideshare.net/iwiwi/ss-11008471
の3ページの交通ネットワークを表すために
31ページみたいなグラフを作って、その解放コードを
ちまちま、解放することを考えています。
後半は、行列なんかを使った後に
for(i = 0; i < ROW_MAX; i++) {
free(row[i]);
}
free(row);
exit(0);
なんてことをやることを想定しています。
わかりにくい書き方ですみません。
前半の部分は
http://www.slideshare.net/iwiwi/ss-11008471
の3ページの交通ネットワークを表すために
31ページみたいなグラフを作って、その解放コードを
ちまちま、解放することを考えています。
後半は、行列なんかを使った後に
for(i = 0; i < ROW_MAX; i++) {
free(row[i]);
}
free(row);
exit(0);
なんてことをやることを想定しています。
473デフォルトの名無しさん
2014/10/13(月) 20:42:43.81ID:FVrYA5zE 行列は幅が変わらないので、W*Hで確保してW*y+xすれば何度も確保する必要ない。
474デフォルトの名無しさん
2014/10/13(月) 20:51:37.45ID:XwZMSYHG >>447
わからないから、教えて下さいだろ。池沼。
わからないから、教えて下さいだろ。池沼。
475デフォルトの名無しさん
2014/10/13(月) 21:03:25.09ID:7i+sJhXA476デフォルトの名無しさん
2014/10/13(月) 21:09:11.84ID:7i+sJhXA477デフォルトの名無しさん
2014/10/13(月) 21:09:16.45ID:HMQ6z8sD >>472
前者は、参照の所有権をちゃんと考えないで複雑なデータ構造を作っちゃうと
いざ壊そうと思ったときに嵌ったりバグったりする典型だね。
後者は、使い捨てのやっつけプログラムとかじゃなければ普通こんなコードが
exit()の直前に置かれることはないと思うし、そうであれば普通に破棄処理として
書くと思うんだけどなぁ。それを「わざわざ」と思うのはまぁ、個人の感覚かも知れんが。
#あぁ、rowもグローバル変数だったりするのかね?
前者は、参照の所有権をちゃんと考えないで複雑なデータ構造を作っちゃうと
いざ壊そうと思ったときに嵌ったりバグったりする典型だね。
後者は、使い捨てのやっつけプログラムとかじゃなければ普通こんなコードが
exit()の直前に置かれることはないと思うし、そうであれば普通に破棄処理として
書くと思うんだけどなぁ。それを「わざわざ」と思うのはまぁ、個人の感覚かも知れんが。
#あぁ、rowもグローバル変数だったりするのかね?
478デフォルトの名無しさん
2014/10/13(月) 21:23:47.22ID:QgIQdsn/479デフォルトの名無しさん
2014/10/13(月) 21:31:35.61ID:7i+sJhXA480デフォルトの名無しさん
2014/10/13(月) 21:47:30.33ID:QgIQdsn/481472
2014/10/13(月) 21:54:16.26ID:XfBY1GST >>477
> 前者は、参照の所有権をちゃんと考えないで複雑なデータ構造を作っちゃうと
> いざ壊そうと思ったときに嵌ったりバグったりする典型だね。
ですので、freeせずにOSの持つメモリ管理機構を利用して
exitですね。
freeするためにプログラムを作っているのではなく
データを扱うためにプログラムを作っているのですから。
メモリリークチェッカを使わなければならないとかで、絶対freeしろって
言われたらmyMallocとmyFreeを作って、全体をmallocして最後に
一発freeってやりたいです。
> 後者は、使い捨てのやっつけプログラムとかじゃなければ普通こんなコードが
> exit()の直前に置かれることはないと思うし、そうであれば普通に破棄処理として
> 書くと思うんだけどなぁ。それを「わざわざ」と思うのはまぁ、個人の感覚かも知れんが。
なにをもってやっつけのプログラムと言うかはさており、
cpは実際にexitの前にforgetAllって終了処理が
word2vec
http://word2vec.googlecode.com/svn/trunk/word2vec.c
ではvocab, vocab_hash, expTableは解放するならmainからのreturn
直前に記述することになりますね。
> #あぁ、rowもグローバル変数だったりするのかね?
あくまで、例のための例ですが、グローバルなときもあります。
# というか、そのほうがすっきりする。
> 前者は、参照の所有権をちゃんと考えないで複雑なデータ構造を作っちゃうと
> いざ壊そうと思ったときに嵌ったりバグったりする典型だね。
ですので、freeせずにOSの持つメモリ管理機構を利用して
exitですね。
freeするためにプログラムを作っているのではなく
データを扱うためにプログラムを作っているのですから。
メモリリークチェッカを使わなければならないとかで、絶対freeしろって
言われたらmyMallocとmyFreeを作って、全体をmallocして最後に
一発freeってやりたいです。
> 後者は、使い捨てのやっつけプログラムとかじゃなければ普通こんなコードが
> exit()の直前に置かれることはないと思うし、そうであれば普通に破棄処理として
> 書くと思うんだけどなぁ。それを「わざわざ」と思うのはまぁ、個人の感覚かも知れんが。
なにをもってやっつけのプログラムと言うかはさており、
cpは実際にexitの前にforgetAllって終了処理が
word2vec
http://word2vec.googlecode.com/svn/trunk/word2vec.c
ではvocab, vocab_hash, expTableは解放するならmainからのreturn
直前に記述することになりますね。
> #あぁ、rowもグローバル変数だったりするのかね?
あくまで、例のための例ですが、グローバルなときもあります。
# というか、そのほうがすっきりする。
482デフォルトの名無しさん
2014/10/13(月) 21:57:14.67ID:7i+sJhXA483デフォルトの名無しさん
2014/10/13(月) 22:05:33.55ID:QgIQdsn/ 速さよりも重要な事なんて無いよ。
金さえあればスパコンがほしいぐらい。
金さえあればスパコンがほしいぐらい。
484デフォルトの名無しさん
2014/10/13(月) 22:09:28.23ID:Okyxmr/t そーゆーレベルだとアルゴリズム工夫した方が早くならね?
485デフォルトの名無しさん
2014/10/13(月) 22:15:14.16ID:6bh+5rPK486デフォルトの名無しさん
2014/10/13(月) 22:17:23.60ID:Okyxmr/t >>483
マルチスレッド使っての高速化とかは無理?
マルチスレッド使っての高速化とかは無理?
487デフォルトの名無しさん
2014/10/13(月) 23:38:21.18ID:7i+sJhXA >>483 は素早く間違った結果が欲しいんだろう w
488デフォルトの名無しさん
2014/10/13(月) 23:41:05.25ID:xQhnOcQ3 >>470
いや、俺はお前みたいな馬鹿じゃないぞ
いや、俺はお前みたいな馬鹿じゃないぞ
489デフォルトの名無しさん
2014/10/13(月) 23:41:20.11ID:7i+sJhXA >>485
> 速さがどーしても欲しいってのはリアルタイムOSとかそういう分野なのかなぁ?
そういう分野は、速さと言うよりどんな場合でも決められた時間に間に合うこと(つまり、遅くならないこと)を要求される
ハードリアルアイム でググってみそ
> 速さがどーしても欲しいってのはリアルタイムOSとかそういう分野なのかなぁ?
そういう分野は、速さと言うよりどんな場合でも決められた時間に間に合うこと(つまり、遅くならないこと)を要求される
ハードリアルアイム でググってみそ
490デフォルトの名無しさん
2014/10/13(月) 23:42:12.91ID:2IfdctYm freeが必要だと思う人はしていただき、その必要性はないと思う人はしない
ということで各々ご対応をお願い致します。
それでは、ここらでお開きとさせていただきます。
皆様、活発な意見交換、誠にお疲れ様でございました。
ということで各々ご対応をお願い致します。
それでは、ここらでお開きとさせていただきます。
皆様、活発な意見交換、誠にお疲れ様でございました。
491デフォルトの名無しさん
2014/10/13(月) 23:50:17.84ID:7i+sJhXA492デフォルトの名無しさん
2014/10/14(火) 00:04:57.97ID:Q5F/7GsC >>491
おまえ、まだいたのかwwww
おまえ、まだいたのかwwww
493デフォルトの名無しさん
2014/10/14(火) 00:16:00.24ID:sqIDnjxe >>492
チキン君乙
チキン君乙
494デフォルトの名無しさん
2014/10/14(火) 00:17:04.09ID:Q5F/7GsC よく吠えるやつほど弱いのはどこでも同じだな
495デフォルトの名無しさん
2014/10/14(火) 01:48:42.60ID:QI+gLDOE >>475
わからないから、教えて下さいだろ。池沼。
わからないから、教えて下さいだろ。池沼。
496デフォルトの名無しさん
2014/10/14(火) 06:32:50.32ID:zT0VwE4n >>403
ネタ主張を1400レスも続けるとかヒッデェなぁ…
ネタ主張を1400レスも続けるとかヒッデェなぁ…
497デフォルトの名無しさん
2014/10/14(火) 06:34:31.53ID:sqIDnjxe498デフォルトの名無しさん
2014/10/14(火) 07:21:14.97ID:VoeXlFKz この問題の根は、ファイル名に日本語を使うべきでないや、メールタイトルに
日本語を使うべきでない、と同じです。
こういった問題について議論すると、必ず日本語を使うべきでないという結論に落ち着く。
しかし、本当の答えは、日本語が使えるべきです。
RAIIは多くの問題を論理的に解消できるので、常に使えるようにするべきです。
LinuxでRAIIが問題を引き起こすことは良く知られています。
メモリーの開放に時間がかかるので、メモリーの明示的開放を避けるべきという議論も
その一つです。
しかし、本当の答えは、Linuxでもメモリーの開放に時間がかからないようにすることです。
RAIIを避けるべきという議論は、過去に繰り返された日本語を使うべきでないという議論と同じです。
日本語を使うべきでない、と同じです。
こういった問題について議論すると、必ず日本語を使うべきでないという結論に落ち着く。
しかし、本当の答えは、日本語が使えるべきです。
RAIIは多くの問題を論理的に解消できるので、常に使えるようにするべきです。
LinuxでRAIIが問題を引き起こすことは良く知られています。
メモリーの開放に時間がかかるので、メモリーの明示的開放を避けるべきという議論も
その一つです。
しかし、本当の答えは、Linuxでもメモリーの開放に時間がかからないようにすることです。
RAIIを避けるべきという議論は、過去に繰り返された日本語を使うべきでないという議論と同じです。
499デフォルトの名無しさん
2014/10/14(火) 08:43:00.85ID:rLZatyKU Linux以外なら、細かく何度もmallocして、しかもスワップアウトした領域を
freeして回っても遅く無いってか?馬鹿じゃないの?
freeして回っても遅く無いってか?馬鹿じゃないの?
500デフォルトの名無しさん
2014/10/14(火) 08:49:08.26ID:KA+Nt7Wt 先に大きめの領域確保して、開放すれば
細かく領域するときの速度が上げれるかもね
なんででしょうね?
細かく領域するときの速度が上げれるかもね
なんででしょうね?
501デフォルトの名無しさん
2014/10/14(火) 08:50:02.00ID:KA+Nt7Wt ☓細かく領域するとき
○細かく領域確保するとき
○細かく領域確保するとき
502デフォルトの名無しさん
2014/10/14(火) 09:05:57.25ID:VoeXlFKz >>499
その問題の原因は、確保したメモリー領域の先頭に大きさなどの情報を持たせることです。
どれだけの大きさを開放するか調べるために遅い二次記憶から情報を復元します。
ですから、仮想記憶が一般的になると、多くのランタイムライブラリがメモリー管理を
OSに任せるようになりました。
メモリーの開放が直接OSによって処理されることで、OSは二次記憶から情報を取り出さずに
解放するタイミングを得ます。
残念ながらLinuxではそうなっていないため、メモリーを開放すると遅いので
解放するべきではないと主張する人が現れるようになりました。
その問題の原因は、確保したメモリー領域の先頭に大きさなどの情報を持たせることです。
どれだけの大きさを開放するか調べるために遅い二次記憶から情報を復元します。
ですから、仮想記憶が一般的になると、多くのランタイムライブラリがメモリー管理を
OSに任せるようになりました。
メモリーの開放が直接OSによって処理されることで、OSは二次記憶から情報を取り出さずに
解放するタイミングを得ます。
残念ながらLinuxではそうなっていないため、メモリーを開放すると遅いので
解放するべきではないと主張する人が現れるようになりました。
503デフォルトの名無しさん
2014/10/14(火) 09:58:22.05ID:9xoyfEkM exitする直前にfreeしないのは、OSのメモリ管理機能を利用してるってことなんだけど?
504デフォルトの名無しさん
2014/10/14(火) 10:05:00.55ID:FOfhE0DJ てなしたやはたてやな
505デフォルトの名無しさん
2014/10/14(火) 10:21:21.80ID:KA+Nt7Wt 長文の割にワケワカなこと書いて漫画な
506デフォルトの名無しさん
2014/10/15(水) 20:16:19.78ID:94xVsGz9 >>503
バカ発見。
バカ発見。
507デフォルトの名無しさん
2014/10/15(水) 20:25:23.13ID:hrBmyTxM 自己紹介乙
508デフォルトの名無しさん
2014/10/16(木) 04:07:06.14ID:7g6vpmsm >>502
>ですから、仮想記憶が一般的になると、多くのランタイムライブラリがメモリー管理を
>OSに任せるようになりました。
>メモリーの開放が直接OSによって処理されることで、OSは二次記憶から情報を取り出さずに
>解放するタイミングを得ます。
そんな非効率的なことをやってる環境があるの?
>ですから、仮想記憶が一般的になると、多くのランタイムライブラリがメモリー管理を
>OSに任せるようになりました。
>メモリーの開放が直接OSによって処理されることで、OSは二次記憶から情報を取り出さずに
>解放するタイミングを得ます。
そんな非効率的なことをやってる環境があるの?
509デフォルトの名無しさん
2014/10/16(木) 06:57:35.08ID:KoQGXxiO VCのmallocはHeapAllocに丸投げする場合があるようだが、一般的かっていうと…
510デフォルトの名無しさん
2014/10/17(金) 09:39:29.66ID:O3Ha9Xaq 何を非効率と言いたいか知らないが、アプリがfreeしまくればメモリアクセスは当然発生する。
サクッと終了しちゃえば、OSはそのアプリに割り当ててたページをそのまま割り当て解除して
回収するだけ。
この効率の差を理解できないか、OSというものを理解してない発言でしかないわけだがwwwww
サクッと終了しちゃえば、OSはそのアプリに割り当ててたページをそのまま割り当て解除して
回収するだけ。
この効率の差を理解できないか、OSというものを理解してない発言でしかないわけだがwwwww
511デフォルトの名無しさん
2014/10/17(金) 16:14:49.18ID:v27NSYq1512デフォルトの名無しさん
2014/10/17(金) 16:21:12.12ID:qPP0na7I アプリ終了以外では
ある程度の大きさ以外は、freeしても割り当て解除はされませんよ
だから、ヘタすると、メモリ分断が怒って....
ある程度の大きさ以外は、freeしても割り当て解除はされませんよ
だから、ヘタすると、メモリ分断が怒って....
513デフォルトの名無しさん
2014/10/17(金) 17:45:37.94ID:O3Ha9Xaq >>511 メモリを大量に確保するアプリならどれにでもあてはまる、
ということすら理解できないのかw
ということすら理解できないのかw
514デフォルトの名無しさん
2014/10/17(金) 18:16:31.32ID:P1joaUul515デフォルトの名無しさん
2014/10/17(金) 18:16:40.65ID:xzFrNjz5 >>510
>>502の言うようにOSにメモリ確保を丸投げしてる場合、APIによってはOSも参照カウントの操作・確認も行うかもしれんぞ?
(例えば、WinのCreateFileMappingで確保したページファイル領域は生きたハンドル(を持つプロセス)があれば残る)
解放をOSに任せることで確実に軽減できるのは、アプリ側が解放すべきハンドルやポインタを走査するコストだけ。
その他のコストは実装依存でどのくらい軽減できるかが異なる。
…けど、これが問題になるケースも実装もそう多くないだろうからなぁ…
>>513
メモリ管理情報の操作に時間がかかってるんだから、小さい領域を山のように確保してるアプリじゃないか?
ポインタの走査にも時間がかかりやすい構造(馬鹿正直なリンクリストなど)だとよりコストが増える。
>>502の言うようにOSにメモリ確保を丸投げしてる場合、APIによってはOSも参照カウントの操作・確認も行うかもしれんぞ?
(例えば、WinのCreateFileMappingで確保したページファイル領域は生きたハンドル(を持つプロセス)があれば残る)
解放をOSに任せることで確実に軽減できるのは、アプリ側が解放すべきハンドルやポインタを走査するコストだけ。
その他のコストは実装依存でどのくらい軽減できるかが異なる。
…けど、これが問題になるケースも実装もそう多くないだろうからなぁ…
>>513
メモリ管理情報の操作に時間がかかってるんだから、小さい領域を山のように確保してるアプリじゃないか?
ポインタの走査にも時間がかかりやすい構造(馬鹿正直なリンクリストなど)だとよりコストが増える。
516デフォルトの名無しさん
2014/10/17(金) 19:39:54.06ID:lxCKNdJC HeapAllocはプロセス内で確保したメモリを小分けして管理してるだけで、
それをOSの機能の一部みたいに扱うのはなんかモニョるな。
それをOSの機能の一部みたいに扱うのはなんかモニョるな。
517デフォルトの名無しさん
2014/10/17(金) 20:22:20.74ID:OUYn97Bj >>511
お前がひねり出したうんこプログラム全部
お前がひねり出したうんこプログラム全部
518デフォルトの名無しさん
2014/10/17(金) 21:53:10.77ID:xzFrNjz5 >>516
言いたいことは分かるがWin32APIって案外そういうの多いからなぁ…
user32とかkernel32にも標準CライブラリみたいなAPI(sprintfモドキも居るしw)が結構一杯ある。
MulDivやCopyMemoryみたいなのも居るし、CopyRectに至ってはただの32バイトコピー。
HeapAlloc程度でモニョってたらこいつらはモニョるなんてレベルじゃすまんぞw
MulDiv(32ビット値3つから中間値64ビットの掛け算と割り算)が何故カーネル扱いなのかと。
言いたいことは分かるがWin32APIって案外そういうの多いからなぁ…
user32とかkernel32にも標準CライブラリみたいなAPI(sprintfモドキも居るしw)が結構一杯ある。
MulDivやCopyMemoryみたいなのも居るし、CopyRectに至ってはただの32バイトコピー。
HeapAlloc程度でモニョってたらこいつらはモニョるなんてレベルじゃすまんぞw
MulDiv(32ビット値3つから中間値64ビットの掛け算と割り算)が何故カーネル扱いなのかと。
519デフォルトの名無しさん
2014/10/18(土) 01:39:31.35ID:/oNwCDSd >>510
つスレッドタイトル
つスレッドタイトル
520デフォルトの名無しさん
2014/10/18(土) 13:08:53.33ID:36yYJ0yX521デフォルトの名無しさん
2014/10/18(土) 13:50:57.61ID:/oNwCDSd >>520
そうもいかない、そんな結論では C++ がいまだに営々と複雑化にこだわっている立つ瀬がない‥
そうもいかない、そんな結論では C++ がいまだに営々と複雑化にこだわっている立つ瀬がない‥
522デフォルトの名無しさん
2014/10/18(土) 16:59:54.98ID:36yYJ0yX メモリは動的に確保するくせに開放は静的にOSに任せたい
だったら、必要になるであろうメモリも配列で静的に確保しとけばいいんじゃね?
とか思うんだが…
でこういうこと言うと荒れるから、結論は
freeしたい人はして、したくない人はしない
で終了でいいんじゃね?っていう
だったら、必要になるであろうメモリも配列で静的に確保しとけばいいんじゃね?
とか思うんだが…
でこういうこと言うと荒れるから、結論は
freeしたい人はして、したくない人はしない
で終了でいいんじゃね?っていう
523デフォルトの名無しさん
2014/10/18(土) 17:06:19.18ID:/oNwCDSd >>522
それは古来lispでもよくみられたプール式、cons セルという定サイズ領域を多量に使う用途で採用されているのをみたことがある
それは古来lispでもよくみられたプール式、cons セルという定サイズ領域を多量に使う用途で採用されているのをみたことがある
524デフォルトの名無しさん
2014/10/19(日) 18:09:53.15ID:9/KRJRbT 解放しないプロセスってデバッガで実行すると終了時に大量のleak検出を吐き出したりしないのか?
525デフォルトの名無しさん
2014/10/20(月) 02:00:02.18ID:jjiQL4kf 吐いたとしても意図的に吐かせてるつもりだろうから問題ないんだろ
526デフォルトの名無しさん
2014/10/20(月) 12:45:42.29ID:4QGk34Ml たぶんメモリリークしてもプロセス終了時に
全部解放されるんだから大丈夫だと思ってるんじゃない?
全部解放されるんだから大丈夫だと思ってるんじゃない?
527デフォルトの名無しさん
2014/10/20(月) 12:49:49.79ID:6/LNQkyp リソースリークとメモリリークの区別もできないとかが典型例だな
528デフォルトの名無しさん
2014/10/20(月) 19:41:25.28ID:WDflShpF リークと解放の区別が付かないバカは死ねば良いと思う。
529デフォルトの名無しさん
2014/10/20(月) 19:48:59.73ID:+DF5oC/s メモリリーク検出ツールでリークと解放の
区別がつかなくなるから解放しとけって話でしょw
区別がつかなくなるから解放しとけって話でしょw
530デフォルトの名無しさん
2014/10/20(月) 23:06:26.87ID:exxFMbgq プログラム中で確保したメモリの各々がfreeする必要あるかないか、間違えずに
判断できる達人ならリークチェッカ使う必要ないな。
判断できる達人ならリークチェッカ使う必要ないな。
531デフォルトの名無しさん
2014/10/21(火) 12:31:58.89ID:LAOYaiit532デフォルトの名無しさん
2014/10/21(火) 12:58:58.48ID:cxE2fch2 要約?
533デフォルトの名無しさん
2014/10/21(火) 13:01:27.03ID:FB8PDZ29 普通にできないといけないことではないかと
534デフォルトの名無しさん
2014/10/21(火) 13:25:02.74ID:LAOYaiit リークチェッカなんて必要ない。
作った奴は馬鹿だ。
ミスをしなければいいだけの話。
作った奴は馬鹿だ。
ミスをしなければいいだけの話。
535デフォルトの名無しさん
2014/10/21(火) 13:49:27.95ID:FB8PDZ29 ミスしてもいいのでは、修正できれば
いきなり完成品?作れる人いるのけ
いきなり完成品?作れる人いるのけ
536デフォルトの名無しさん
2014/10/21(火) 17:55:34.62ID:RumsGmel デバッグモードでコンパイルしたときだけ解放したら
良いだけじゃん馬鹿すぎ
良いだけじゃん馬鹿すぎ
537デフォルトの名無しさん
2014/10/21(火) 18:51:18.50ID:LAOYaiit >>535
その修正をサポートするルールがリークチェッカでしょ?
で、free不要なんていって、free書いてないから
たくさん出るエラーの中から本当にリークしているものを
探して出すというマヌケな作業を行うwww
結論出たじゃん? freeは必要。
その修正をサポートするルールがリークチェッカでしょ?
で、free不要なんていって、free書いてないから
たくさん出るエラーの中から本当にリークしているものを
探して出すというマヌケな作業を行うwww
結論出たじゃん? freeは必要。
538デフォルトの名無しさん
2014/10/21(火) 19:58:14.89ID:FB8PDZ29 便利な道具がある。
とかいうとわからないでも出来ると勘違い...
とかいうとわからないでも出来ると勘違い...
539デフォルトの名無しさん
2014/10/21(火) 20:16:00.88ID:7WAeJlTS なんでfree関数というものがあるのかを考えればわかるよな
もう終わりだろ…
もう終わりだろ…
540デフォルトの名無しさん
2014/10/21(火) 21:03:35.69ID:c8NUu7RB541デフォルトの名無しさん
2014/10/21(火) 21:34:25.75ID:FB8PDZ29 リークチェッカのエラーをなくすことが答えだと思ってる人もいますね
微妙な...
微妙な...
542デフォルトの名無しさん
2014/10/21(火) 22:04:40.05ID:RG7X7O+y リークチェッカーでリークを葬ったら、おもむろに選別していけば言いだけの話
というか、リソースリークの方が深刻でちょっと困っている
というか、リソースリークの方が深刻でちょっと困っている
543デフォルトの名無しさん
2014/10/22(水) 21:25:19.20ID:9Jwqj8Ni おもむろに選別する効果・・・0.001秒速くなる。
デメリット、選別作業に数時間。
ドラブルあって、戻すのに数時間
デメリット、選別作業に数時間。
ドラブルあって、戻すのに数時間
544デフォルトの名無しさん
2014/10/23(木) 01:07:59.70ID:lumgeE3v >>542
リソースの確保・開放処理をリークチェッカと同じ仕組でラップしよう。
リソースの確保・開放処理をリークチェッカと同じ仕組でラップしよう。
545デフォルトの名無しさん
2014/10/23(木) 08:36:30.18ID:CIjfK2M+ >>544
api の数だけラップを用意するのもなんだかね‥
api の数だけラップを用意するのもなんだかね‥
546デフォルトの名無しさん
2014/12/03(水) 21:28:00.02ID:j0dAKNGZ C++だと、動的確保って
int *a = new int;
/*
aを使った処理
*/
delete a;
みたく書くと思うけど、deleteしないとアプリケーションを終了させても
確保されっぱなしだよね?
free()不要とか言ってるやつは、上記でいうdelete不要って言ってるのと
同じだよね?
int *a = new int;
/*
aを使った処理
*/
delete a;
みたく書くと思うけど、deleteしないとアプリケーションを終了させても
確保されっぱなしだよね?
free()不要とか言ってるやつは、上記でいうdelete不要って言ってるのと
同じだよね?
547デフォルトの名無しさん
2014/12/03(水) 21:41:48.53ID:JFY2u8h+ newは互換性のためにmallocで実装されてると聞いたことがある。ほんとか知らんけど。
548デフォルトの名無しさん
2014/12/03(水) 22:01:51.69ID:U2a4HdIu >>546
>deleteしないとアプリケーションを終了させても確保されっぱなしだよね?
いや、それはない。アプリ終了時にアプリの使用していたメモリは OS が解放する。これは基本的な共通認識。
それをみこして free()/delete を@まったくしないでもいい、A選別して使用しないのもありだ、B信者ならどんな new/malloc() も必ず delete/free() すべきだ、真っ向に対立している。
>deleteしないとアプリケーションを終了させても確保されっぱなしだよね?
いや、それはない。アプリ終了時にアプリの使用していたメモリは OS が解放する。これは基本的な共通認識。
それをみこして free()/delete を@まったくしないでもいい、A選別して使用しないのもありだ、B信者ならどんな new/malloc() も必ず delete/free() すべきだ、真っ向に対立している。
549デフォルトの名無しさん
2014/12/03(水) 22:25:43.16ID:JF624AUp B選別するほうが面倒くさいだろう
550デフォルトの名無しさん
2014/12/04(木) 02:18:35.19ID:wOy+480c C++なら、メモリマネージメントクラス書くでしょ。その前にstd::vectorあるけど。
551デフォルトの名無しさん
2014/12/04(木) 04:20:29.25ID:ViSTblTx Jane使ってる人は分かると思うけど、一度に多量の画像を保存する機会が多いと思う
そしてJaneは一度立ち上げたらOS再起動するまで大抵立ち上げっぱなし
そんな状態で画像の展開領域のためにmalloc()もしくはnewしたメモリをfree()やdelete
しなかったらどうなる?これ32bitアプリでしょ?120〜150枚ほど画像を開くと、例えば俺の
環境の場合Windows8.1だからJaneには2GB割り当あられるけど、free()しないとすぐに
メモリがなくなっちゃうね
そしてJaneは一度立ち上げたらOS再起動するまで大抵立ち上げっぱなし
そんな状態で画像の展開領域のためにmalloc()もしくはnewしたメモリをfree()やdelete
しなかったらどうなる?これ32bitアプリでしょ?120〜150枚ほど画像を開くと、例えば俺の
環境の場合Windows8.1だからJaneには2GB割り当あられるけど、free()しないとすぐに
メモリがなくなっちゃうね
552デフォルトの名無しさん
2014/12/04(木) 07:46:58.88ID:44/e6+B9 delete/free()不要って言ってる人って、もはやなぜメモリを動的に確保するのか?
の意味を見失ってる人ですよね?
可哀想です
の意味を見失ってる人ですよね?
可哀想です
553デフォルトの名無しさん
2014/12/04(木) 08:53:33.85ID:i8WWsgkD554デフォルトの名無しさん
2014/12/04(木) 09:15:31.23ID:otxDKoZc ガベージコレクションはいらない、と必死でやせ我慢してC++を使う俺カッコイイ、というわけですねわかります
本来はこの一言で終わる話なのに、可哀想です
本来はこの一言で終わる話なのに、可哀想です
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 【🐻ニャー】京都府向日市の「クマ目撃情報」は見間違いか 市が映像確認「ネコに似ていた」 [nita★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- 【東京】「家族で話題にして」 “世田谷一家殺害から25年 警視庁が呼びかけ [煮卵★]
