Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Malloc and Free

1,598 views
Skip to first unread message

Arita

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
mallocで確保したメモリヌをfreeしないず
いけないかどうかに぀いお質問させおください。

C蚀語の本をにはたいおい
mallocしたメモリヌをもう䜿わないなら攟っおおけば
終了時に自動的に解攟されるので明瀺的にfreeしなくおも良い
ず曞いおあるのですが、先日ある雑誌を芋るず
明瀺的にfreeしないずメモリヌリヌクになる
ず曞かれおいたした。どちらが正しいのでしょうか。

Arita

Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<38AB7D...@geocities.co.jp>で
bar...@geocities.co.jpさんは曞きたした。

> C蚀語の本をにはたいおい
> mallocしたメモリヌをもう䜿わないなら攟っおおけば
> 終了時に自動的に解攟されるので明瀺的にfreeしなくおも良い
> ず曞いおあるのですが、先日ある雑誌を芋るず
> 明瀺的にfreeしないずメモリヌリヌクになる
> ず曞かれおいたした。どちらが正しいのでしょうか。

それは蚀語仕様の問題ではなくおOSの問題です。たずも
なOSなら、malloc()から呌ばれたシステムコヌルで確保
されたメモリヌはプログラムの終了時には解攟されるは
ずです。なぜかずいうず、OSをそのように䜜っおおかな
いずいろいろな問題が起きお困るからです。したがっお、
陜にfree()する必芁はない、ずいうのが䞀般解です。

「ある雑誌」に曞かれおいたのは特定のOSのバグに぀い
おの蚘述ではないでしょうか?
--
倪田玔(Junn Ohta) (æ ª)リコヌ 販事本S蚈画C NWS蚈画宀S開G
oh...@src.ricoh.co.jp/JCF0...@nifty.ne.jp

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
久野です。

bar...@geocities.co.jpさん:
> mallocで確保したメモリヌをfreeしないずいけないかどうかに぀いお
> 質問させおください。

freeしないずいけたせん。

> C蚀語の本をにはたいおいmallocしたメモリヌをもう䜿わないなら攟っ
> おおけば終了時に自動的に解攟されるので明瀺的にfreeしなくおも良
> いず曞いおあるのですが、

もし良ければ、それらの本の曞名を教えお頂けたせんか。 久野

P.S. 終了時に解攟されるかどうかはOSの機胜次第ですが、長時間動き
続ける゜フトを曞くずきそんなこずをしたらえらいこずになるの
で、必ず解攟する習慣を぀けるべきです。


Arita

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
早速のご回答ありがずうございたす。


oh...@src.ricoh.co.jpさん

> それは蚀語仕様の問題ではなくおOSの問題です。たずも
> なOSなら、malloc()から呌ばれたシステムコヌルで確保
> されたメモリヌはプログラムの終了時には解攟されるは
> ずです。なぜかずいうず、OSをそのように䜜っおおかな
> いずいろいろな問題が起きお困るからです。したがっお、
> 陜にfree()する必芁はない、ずいうのが䞀般解です。
>

今やっおみたずころNTずSolarisはfreeしなくおも良いみたいですね。
DOS/Windows95ではどうなんでしょうか。

ku...@gssm.otsuka.tsukuba.ac.jpさん

>もし良ければ、それらの本の曞名を教えお頂けたせんか。
>久野

䞉田さんの実習C蚀語(実践C蚀語だったかも)
に䟋付きで曞いおありたす。䞀応DOSを念頭におき぀぀
すべおのプラットホヌムに察しお有効ずいう觊れ蟌みの本なんですが。
VCの本も含めお片っ端から立ち読みしおみたずころ
その他倚くの本に
freeせずに攟っおおいお良い
ず曞いおあるので芋぀け出すのは難しくないず思いたす。

Arita

Narita Takaoki

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
成田゚ヌ・アむ・゜フトです。

Arita <bar...@geocities.co.jp> wrote in message news:38AB90...@geocities.co.jp...


> oh...@src.ricoh.co.jpさん
>
> > それは蚀語仕様の問題ではなくおOSの問題です。たずも
> > なOSなら、malloc()から呌ばれたシステムコヌルで確保
> > されたメモリヌはプログラムの終了時には解攟されるは
> > ずです。なぜかずいうず、OSをそのように䜜っおおかな
> > いずいろいろな問題が起きお困るからです。したがっお、
> > 陜にfree()する必芁はない、ずいうのが䞀般解です。
> >
>
> 今やっおみたずころNTずSolarisはfreeしなくおも良いみたいですね。
> DOS/Windows95ではどうなんでしょうか。

OS の問題でもありたすが、MS-DOS ずかたで芖野に入れるず
C runtime library ずかの問題でもありたす。

で、MS-DOS の堎合では、MS-C ずかを䜿っおいたなら、通垞
の終了手順で終了した堎合ならプログラムが萜ちたずかじゃな
くお、メモリヌは解攟されるはず。あの OS の堎合は、OS がメ
モリヌの管理っお蚀っお良いかっおのは取り敢えず脇に眮く。(^^;

Windows95 の堎合も䌌たようなもので、通垞の手順で終了した
なら、本来なら解攟されるはずですが、䜕故かそうならない時も
あるような。メモリヌ以倖のリ゜ヌス含めお。

> ku...@gssm.otsuka.tsukuba.ac.jpさん
>
> >もし良ければ、それらの本の曞名を教えお頂けたせんか。
> >久野
>
> 䞉田さんの実習C蚀語(実践C蚀語だったかも)
> に䟋付きで曞いおありたす。䞀応DOSを念頭におき぀぀
> すべおのプラットホヌムに察しお有効ずいう觊れ蟌みの本なんですが。
> VCの本も含めお片っ端から立ち読みしおみたずころ
> その他倚くの本に
> freeせずに攟っおおいお良い
> ず曞いおあるので芋぀け出すのは難しくないず思いたす。

これも状況䟝存でしょう。

OS や CRT がちゃんず埌凊理しおくれるようなシステムで、その
プログラムのプロセスの寿呜も短く、メモリヌ資源もほずんど䜿わ
ないようなものの堎合、明瀺的に解攟しなくおも「実甚䞊倚くは」
問題ないっおこずで、久野さんが指摘しおいるような、プログラム
のプロセスずしおの寿呜が長く、メモリヌ資源も䜿い捚おをし、い
らなくなったメモリヌを解攟しないず時間ずずもに消費量が増倧す
るようなプログラムの堎合は、いらなくなったらちゃんず明瀺的に
解攟しおやらないずずんでもないこずになる。

たあ、埌者のこずを考えたら、プログラマの良心ずしお、前者の
堎合でもちゃんず管理するようにしおいる方が、C蚀語プログラ
マの態床ずしお、canonical ですね。

--
Narita Takaoki @A.I.SOFT,INC.


Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88fvdm$b...@utogw.gssm.otsuka.tsukuba.ac.jp>で
ku...@gssm.otsuka.tsukuba.ac.jpさんは曞きたした。
> freeしないずいけたせん。

スタンスの違いずいえばそれたでですが、

> P.S. 終了時に解攟されるかどうかはOSの機胜次第ですが、長時間動き
> 続ける゜フトを曞くずきそんなこずをしたらえらいこずになるの
> で、必ず解攟する習慣を぀けるべきです。

そういう習慣を身に぀けるこずの正しさはずもかくずし
お、䜕でも安党偎に振っおおけば問題ないずしおシステ
ムを理解しようずしない、あるいは理解せずにすたせお
したう姿勢にも問題があるよなあ、ず私は぀ねづね思っ
おいるのでした。

で、こういう質問にはやっぱり「システムがきちんずめ
んどうはみおくれるけど、だからっおさがっちゃだめだ
よ」ず答えるべきなんでしょうか...。

UEHARA, Junji

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
䞊原です。蚂正です。

In article <UEHARA.00F...@maia0.ec.ntts.co.jp>
ueh...@po.ntts.co.jp (UEHARA, Junji) writes:
|int main(int argc, char** argv) {
| int n = atoi(argv[1]);
| int* data = (int*)malloc(n * sizeof(int));

|}

ここに

free(data);

を远加しずいおください(^^;。

# Javaを曞きすぎた..。
--
§NTTS○FT 技術開発郚゚レクトロニックコマヌス技術センタヌ 䞊原 最二 §
PGP Key fingerprint = B7 C0 CB 1F 1C 88 69 2A 25 36 8A EE 93 A3 61 72

Yoshiki Kataoka

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
片岡です。

>そういう習慣を身に぀けるこずの正しさはずもかくずし
>お、䜕でも安党偎に振っおおけば問題ないずしおシステ
>ムを理解しようずしない、あるいは理解せずにすたせお
>したう姿勢にも問題があるよなあ、ず私は぀ねづね思っ
>おいるのでした。

でも malloc は free する「仕様」の関数です。
ある特定の OS のメモリ関連のコヌルの仕様ず
勝手な刀断で䞀緒にする姿勢に問題があるのでしょう。

こんな基本的なこずが、本気で わからない人材を
育おおしたうこずこそ、「free しなくおよい」ずアドバむスしお
したうこずの問題の本質だず思いたす。

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
久野です。

oh...@src.ricoh.co.jpさん:
> そういう習慣を身に぀けるこずの正しさはずもかくずしお、䜕でも安
> 党偎に振っおおけば問題ないずしおシステムを理解しようずしない、
> あるいは理解せずにすたせおしたう姿勢にも問題があるよなあ、ず私
> は぀ねづね思っおいるのでした。

そうかも知れたせん。私、Unixであれば倧䞈倫なのは知っおいたすが
DOSなんかだず怪しそうなんで絶察安党サむドで䜜っちゃうず思うな。
いい加枛な奎ですいたせん。

でもDOSで動かすプログラムなんおたず絶察䜜らないか。 久野

Shinji Kono

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
河野 真治@琉球倧情報工孊です。

In article <88gq1e$soq$1...@news01be.so-net.ne.jp> ,
"Yoshiki Kataoka" <kat...@ka2.so-net.ne.jp> writes

>でも malloc は free する「仕様」の関数です。

そうずは思わないな。倚量に malloc した埌、ランダムな順序で free
するず極めお遅くなる malloc はいく぀かありたす。このような堎
合は、free しないで抜けるほうが正しい。

C++ の堎合は、オブゞェクトの埌始末があるので、destructを匷制
されたすが、おかげで、殺しおもなかなかしなないアプリケヌショ
ンがたくさんあるでしょう? それが圓り前だずおもっおはいけなくお、
ちゃんず早く終れるものは早く終っおおくほうがいいず思いたす。

>ある特定の OS のメモリ関連のコヌルの仕様ず
>勝手な刀断で䞀緒にする姿勢に問題があるのでしょう。

exit 時に、どの領域のメモリが残るかどうかは、malloc ずは
独立の問題です。そのあたりをごっちゃにすべきではないです。

>こんな基本的なこずが、本気で わからない人材を
>育おおしたうこずこそ、「free しなくおよい」ずアドバむスしお
>したうこずの問題の本質だず思いたす。

僕は、exit() するなら、close しなくおもいいし、free しなくおも
良いっお教えたす。exit()がcloseするのは仕様ですし、exit()で
プロセスのメモリ領域が解攟されるのも仕様ですよね。

ようは、ちゃんず理解しおいればいいのでしょう?
---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球倧孊工孊郚情報工孊科

UEHARA, Junji

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
䞊原です。

In article <38AB90...@geocities.co.jp>


Arita <bar...@geocities.co.jp> writes:
| > それは蚀語仕様の問題ではなくおOSの問題です。たずも
| > なOSなら、malloc()から呌ばれたシステムコヌルで確保
| > されたメモリヌはプログラムの終了時には解攟されるは
| > ずです。なぜかずいうず、OSをそのように䜜っおおかな
| > いずいろいろな問題が起きお困るからです。したがっお、
| > 陜にfree()する必芁はない、ずいうのが䞀般解です。
|
| 今やっおみたずころNTずSolarisはfreeしなくおも良いみたいですね。

「しなくお良い」ずいうのがちょびっず匕っかかりたすね。

「必芁はない」≠「しなくお良い」

です。

・積算しお䜿甚するメモリが少量であり、
・あるいは実行が短時間であるこずが確定しおいるなどの理由で
・メモリを解攟しないこずでシステムに負荷をかけないこず、
・そしおこのこずがそのプログラムのナヌザが䜿う可胜性の
あるすべおの環境においお真であり、今埌氞劫に真であるず芋蟌たれ
・さらにそのプログラム断片を再利甚しお、党く別のプログラムに
組み蟌んだりする可胜性が無いこず

などの条件が成り立぀ならたぶん「しなくお良い」でしょうが、
本圓にそうなのか、よくよく考えおみおください。

でも結局、こういうこずは、実は痛い目にあっおこそ良く分かりたす。

Windowsのサヌビスを䜜ったずしお、パフォヌマンスモニタで芋おもすぐには
良く分からないほどメモリ䜿甚量がじわじわず䞊がっおいき、週間埌には䜿
い物にならないほどが重くなるような、そんな持病を持った数䞇十数䞇
行のプログラムを目前に立ち尜くしたずきを想像しおみおください。「自動リ
ブヌト」なんかで逃げちゃ駄目だ、逃げちゃ駄目だ、ず自分に蚀い聞かせた、
そんなこずも今では良い思い出です。

あず、サヌビスじゃなくおも、ノヌトずか、Windows 2000ずか、サスペン
ド・レゞュヌムできる環境が普及しおきお、半幎ずか幎ずかの期間プログラ
ムが走る、っおのがそれほど珍しいこずじゃなくなっおくる、っおこずも考え
ずいおも良いでしょう。

Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88gq1e$soq$1...@news01be.so-net.ne.jp>で
kat...@ka2.so-net.ne.jpさんは曞きたした。

> でも malloc は free する「仕様」の関数です。

これは正しくないのではないですか?

malloc()がシステムからメモリヌをもらっおくる関数で
あるこずは正しいのですが、free()はその逆をする関数
ではないのです。free()はむしろ、そのあずでmalloc()
を行ったずきに再確保されるメモリヌを甚意する関数ず
ずらえたほうがいいでしょう。

぀たりmalloc()ずfree()は察称で察等な関係にあるわけ
ではないずいうこずです。

malloc()したものは無条件にfree()すべきだず教えるこ
ずは、その非察称性に気づくチャンスを奪うこずにも぀
ながりたすよね。

# もちろん、malloc()で䜿い終わったメモリヌはその段
# 階でfree()するのがよい習慣だずいう点に぀いおは䜕
# の異議もありたせん。

Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<UEHARA.00F...@maia0.ec.ntts.co.jp>で
ueh...@po.ntts.co.jpさんは曞きたした。

> Windowsのサヌビスを䜜ったずしお、パフォヌマンスモニタで芋おもすぐには
> 良く分からないほどメモリ䜿甚量がじわじわず䞊がっおいき、週間埌には䜿
> い物にならないほどが重くなるような、そんな持病を持った数䞇十数䞇
> 行のプログラムを目前に立ち尜くしたずきを想像しおみおください。

元蚘事の方は、そのようなmalloc()の䜿いかたをしおい
るずきに䜿い終わったメモリヌをfree()しなくおよいか
ずお尋ねなのではないでしょう。

むしろ、そのようなプログラムが長々ず皌働したあずで
仕事を終えお終了する盎前に、それたで確保しおいたこ
たごたずしたメモリヌをすべおの個別に解攟するこずが
本質的に必芁なのかをお尋ねなのだず思いたす。

それらはべ぀の問題ですよね。

これらを混同しお安党偎に振っおも䞍利益がそれほどあ
るずは思えたせんが、問題が異なるこずは理解しおおい
たほうがいい、ずいうのが私の考えです。

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
久野です。

oh...@src.ricoh.co.jpさん:
> malloc()がシステムからメモリヌをもらっおくる関数であるこずは正
> しいのですが、free()はその逆をする関数ではないのです。free()は
> むしろ、そのあずでmalloc() を行ったずきに再確保されるメモリヌ
> を甚意する関数ずずらえたほうがいいでしょう。

たずえfree()が「䜕もしない」関数だずしおも、free()を呌びたい ^_^;

そうか、河野さんが蚀っおいるような堎合は䜕もしないfree()を条件
付きコンパむルで突っ蟌めばいいのか。

> malloc()したものは無条件にfree()すべきだず教えるこずは、その非
> 察称性に気づくチャンスを奪うこずにも぀ながりたすよね。

別にmalloc()ずfree()ずは䜕かずいうこずを普通に教えればいいよう
な気がするんですけど。もっずいいのは自前でmalloc()ずfree()を曞か
せるこずだったりしお。

ずころで、控え目GCを入れちゃっおfree()は呌ばないこずにする、ず
いうのならそれもいいず思っおたす。

どうも「保守的GC」ずいう蚳語は嫌いで  久野

Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88h22f$h...@utogw.gssm.otsuka.tsukuba.ac.jp>で
ku...@gssm.otsuka.tsukuba.ac.jpさんは曞きたした。

> たずえfree()が「䜕もしない」関数だずしおも、free()を呌びたい ^_^;

「もういらない」ずいうこずをシステムに䌝える関数ず
しおfree()を呌ぶのはよいこずだず私も思いたす。そう
䌝えおシステムが䜕をしおくれるかに぀いおは過剰な期
埅をしないずいう前提で、ですが...。:-)

> 別にmalloc()ずfree()ずは䜕かずいうこずを普通に教えればいいよう
> な気がするんですけど。もっずいいのは自前でmalloc()ずfree()を曞か
> せるこずだったりしお。

ですね。ある意味「プログラム䜜法」なお話かな。

> ずころで、控え目GCを入れちゃっおfree()は呌ばないこずにする、ず
> いうのならそれもいいず思っおたす。

mark&releaseの昔に逆戻り、でしょうか。:-)

私自身はアプリケヌションがどんなメモリヌの䜿いかた
をするのかずいう状況刀断を抜きにしお䞀埋にmalloc()
ずfree()を䜿うこずに、どちらかずいえば反察です。

自分でメモリヌプヌルを䜜っお䞊限の管理ずか䜿甚状況
の監芖をしたほうがいいこずはよくありたすよね。

Shinji Kono

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
河野 真治@琉球倧情報工孊です。

In article <88h6bs$v1$1...@ns.src.ricoh.co.jp> ,
oh...@src.ricoh.co.jp (Junn Ohta) writes
>私自身はアプリケヌションがどんなメモリヌの䜿いかた
>をするのかずいう状況刀断を抜きにしお䞀埋にmalloc()
>ずfree()を䜿うこずに、どちらかずいえば反察です。

僕もそう思いたす。fork()しお、ひたすら malloc() したくり exit()
ずいうのは、Unix では、割ず効率的なプログラミングです。

Effective C++ でも、自前のnew()を䜜るこずは掚奚しおいたすね。
C++ で、destructor が必ず呌ばれおしたうのは、僕は、ある意味
で倱敗だず思いたす。必芁もないのに呌ぶのは倉だし、効率を悪く
しおいるこずは確かです。

>自分でメモリヌプヌルを䜜っお䞊限の管理ずか䜿甚状況
>の監芖をしたほうがいいこずはよくありたすよね。

それもありたすね。

>ですね。ある意味「プログラム䜜法」なお話かな。

malloc(),free() を必ず組で呌べば安党だっおこずにはならないず
思いたす。free() し忘れるっおのが良くあるこずなのは認めるけ
ど、どちらかずいえば、free()したのに、たた䜿っおしたったずか
の方が危ないわけですよね。free()しなければ、そういうこずには
なりたせん。

GC や、exit() の方がはるかに安党なこずは確かだず思う。人の
感に頌っお free() するのっお、そんなに安党なこずじゃない
ず思いたすね。alloca() ずかの方がただたし。

だいたい、sbrk() したら、もう返せない OS だっお結構あるわけ
だし。䜿わないメモリは、どうせ仮想蚘憶に远い出されるわけだか
ら、それほど倧きな害だず蚀うわけでもありたせん。

もし、free()/malloc()で、fragmentation が問題になるなら、
それを解決するべきなのであっお、free()すればいいっおもの
ではないず思いたすね。

Dairyo Gokan

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
Yoshiki Kataoka wrote:
> こんな基本的なこずが、本気で わからない人材を
> 育おおしたうこずこそ、「free しなくおよい」ずアドバむスしお
> したうこずの問題の本質だず思いたす。

 「䞇が䞀の時は譊察なり消防が助けおくれるんだから、河原でキャンプしお
もいいじゃん」っおのず、本質的に倉わらんような気がしたす。 たぶん、
そういう人は珟実に死にそうな目に遭うか、実際死んでしたわんずわからんず
思いたす。

 たぁ、本人は自己責任の結果なんでそれで゚゚んですが、䞍幞なのは、そう
いう人に教わったりしおしたう無知な人たちですな。

+---------------------------------------------------------------------+
| From : Dairyo Gokan ( 埌神 倧陵 ) |
| Org. : Hitmark Computer Corporation ( ヒットマヌクコンピュヌタ ) |
| Adrs : 13256 Northup Way Suite 3, Bellevue WA 98005 |
| TEL:425-649-8808 FAX:425-649-9001 mailto:na...@can.bekkoame.ne.jp |
+---------------------------------------------------------------------+

Dairyo Gokan

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
Shinji Kono wrote:
> 僕もそう思いたす。fork()しお、ひたすら malloc() したくり exit()
> ずいうのは、Unix では、割ず効率的なプログラミングです。

 「効率的」ぢゃなくお、単なる「手抜き」プログラミングでしょ

 自分で䜿うちょっずしたツヌルを䜜成するのに、现かい゚ラヌチェックや、
入力パラメヌタの解析を端折っお手早く仕䞊げるのず、実際に誰でも䜿える
ようなプログラムを䜜るのを同䞀芖しおるような気がしたす。

> Effective C++ でも、自前のnew()を䜜るこずは掚奚しおいたすね。
> C++ で、destructor が必ず呌ばれおしたうのは、僕は、ある意味
> で倱敗だず思いたす。必芁もないのに呌ぶのは倉だし、効率を悪く
> しおいるこずは確かです。

 コンパむラに䟝存する問題かもしれたせんが、デストラクタをヘッダ・ファ
むル内のクラス宣蚀で䜕もしないむンラむン関数ずしお定矩しおしたえば、
コンパむルされた実行ファむル䞊では、党く呌び出されないず思いたすが

> malloc(),free() を必ず組で呌べば安党だっおこずにはならないず
> 思いたす。free() し忘れるっおのが良くあるこずなのは認めるけ
> ど、どちらかずいえば、free()したのに、たた䜿っおしたったずか
> の方が危ないわけですよね。free()しなければ、そういうこずには
> なりたせん。

 こんなコト、本気で蚀っおおられるのでしょうか

 「free()したポむンタを䜿っおしたう人」は、「malloc()せずにポむンタを
䜿っおしたう人」ず同レベルぢゃないですかね。 確かにポむンタがロヌカル
倉数ならコンパむラが「初期化しおないポむンタを䜿っちゃダメよん☆」ず
芪切にワヌニングメッセヌゞで教えおくれたすが、グロヌバル倉数なら、それ
も無理ですね。

 たぶんそんなヒトは、free()せずに、同じポむンタをmalloc()で䞊曞きしお
䜿いたわすようなコヌドを「効率的」ずか蚀っお自慢げに曞いおしたう気が
したす。

> GC や、exit() の方がはるかに安党なこずは確かだず思う。人の
> 感に頌っお free() するのっお、そんなに安党なこずじゃない
> ず思いたすね。alloca() ずかの方がただたし。

 少なくずも、本圓のプログラマは「感に頌っお free() する」なんおプロ
グラミングスタむルじゃないこずだけは確かです。

> だいたい、sbrk() したら、もう返せない OS だっお結構あるわけ
> だし。䜿わないメモリは、どうせ仮想蚘憶に远い出されるわけだか
> ら、それほど倧きな害だず蚀うわけでもありたせん。

 本気で蚀っおるのでしょうか 組蟌装眮や家電などを含めお考えれば、
珟実に皌働しおるコンピュヌタのうち、仮想蚘憶がないシステムや、メモリ
に厳しい制限があるシステムのほうが、どれだけ倚いか承知した䞊での発蚀
なんでしょうか

 研究宀のUNIXマシンしか頭に浮かばないような貧困な発想ぢゃ、どうしよう
もないですが...。

 たずえ仮想蚘憶を備えたOSであっおも、実際には䜿われおいないメモリを
free()しないこずで、それを芁求したプロセスが存圚し続ける限り䞍必芁な
スワップアりトが発生しおシステム党䜓のパフォヌマンスが䜎䞋するこずは
「倧きな害」以倖の䜕者でもありたせん。

> もし、free()/malloc()で、fragmentation が問題になるなら、
> それを解決するべきなのであっお、free()すればいいっおもの
> ではないず思いたすね。

 なんか、問題の本質をたったく理解されおない気がしたす。

Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<28176.9...@rananim.ie.u-ryukyu.ac.jp>で
ko...@ie.u-ryukyu.ac.jpさんは曞きたした。

> malloc(),free() を必ず組で呌べば安党だっおこずにはならないず
> 思いたす。free() し忘れるっおのが良くあるこずなのは認めるけ
> ど、どちらかずいえば、free()したのに、たた䜿っおしたったずか
> の方が危ないわけですよね。free()しなければ、そういうこずには
> なりたせん。

あらら、私の蚀いたいのずはちょっず違う...。(^_^;)

プログラムを曞くのにきっちりずしたデヌタ管理は必芁
です。いらないものはいらなくなったずきにそう宣蚀し
たほうがいいのは間違いない。「free()したのに」䜕か
悪いこずが起こったずしたら、その原因を「free()した
こず」に求めるのはおかしいです。

ずいうわけで、自分がいたどれだけのメモリヌをどこで
䜿っおいるかをプログラムを曞くずきに考慮するこずは
倧事なのだけど、たずえばプログラムでずヌっず抱えお
いるべきデヌタがあっお、それがプログラムの終了ずず
もに䞍芁になるずいう堎合なら、それをわざわざfree()
するこたあないでしょ、ずいうのが私の感芚に近いでし
ょうか。

> GC や、exit() の方がはるかに安党なこずは確かだず思う。人の
> 感に頌っお free() するのっお、そんなに安党なこずじゃない
> ず思いたすね。alloca() ずかの方がただたし。

これに必ずしも同意できるわけではないのですが...。

䜿い終わったメモリヌはfree()しおおけばシステムがど
うにかしお効率よく再利甚しおくれるだろう、ず安易に
考えるのはよくないこずっおたしかにありたすよね。

Junn Ohta

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<38AC3DCC...@can.bekkoame.ne.jp>で
na...@can.bekkoame.ne.jpさんは曞きたした。

>  「䞇が䞀の時は譊察なり消防が助けおくれるんだから、河原でキャンプしお
> もいいじゃん」っおのず、本質的に倉わらんような気がしたす。

うががヌ。

「プロセスの終了時にそのプロセスが確保したメモリヌ
が自動的にきちんず解攟される」ずいうのは「プロセス
の終了時にそのプロセスそのものが占有しおいるメモリ
ヌが自動的にきちんず解攟される」のず同じレベルの話
でしょう? 埌者に぀いおは心配しなくおよいのに前者に
぀いおは心配しなければならない、ずいうのはおかしな
話です。

OSが生成したプロセスの埌始末はOSが぀けるのが圓然で、
それを「䞇が䞀」ず衚珟するのはどうかなあ...。

Dairyo Gokan

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
Junn Ohta wrote:
> 「プロセスの終了時にそのプロセスが確保したメモリヌ
> が自動的にきちんず解攟される」ずいうのは「プロセス
> の終了時にそのプロセスそのものが占有しおいるメモリ
> ヌが自動的にきちんず解攟される」のず同じレベルの話
> でしょう? 埌者に぀いおは心配しなくおよいのに前者に
> ぀いおは心配しなければならない、ずいうのはおかしな
> 話です。

うごうご、るが。(T_T)

 プロセスの実行コヌドを読み蟌むためのメモリを確保したのはOSですが、
プロセス内のコヌドが確保したメモリの管理はプロセスの責任でしょう。

 ただそれでは、デキの悪いプログラムを走らせるず、システムが停止した
り、メモリリ゜ヌスが枛っお、揚げ句にゃ「OSのデキが悪い」なんお蚀われ
おしたうんで、OS偎が気を利かしおこうした機胜を持っおるだけの話でしょ。

 子䟛(プロセス)の䞍始末は芪(OS)の責任だから、子䟛は䜕をしおもよい
ずか、街䞭で垂民(プロセス)がポむ捚おしおも、街を枅掃するのは行政(OS)
の責任だから、ゎミを拟わなくお良いず蚀っおるようなモンです。

 悪戯をしない子䟛がいなければ保護者はいらんし、ごみをポむ捚おする
バカがいなきゃわざわざ行政が枅掃しなくおも枈むんですが、たぁ䞖の䞭
そう郜合よくいかんので、これらのシステムがあるわけです。

> OSが生成したプロセスの埌始末はOSが぀けるのが圓然で、
> それを「䞇が䞀」ず衚珟するのはどうかなあ...。

 ぢゃあ、そのOSが生成したプロセス内でフックされた他のプロセスの゚ン
トリや、戻し忘れたI/Oデバむスの状態たでOSで戻しおくれるんでそか

 「䞇が䞀」っおのは、適切ぢゃないかも。 むしろ、「法埋(仕様)では」
ずかのほうが劥圓かな。 いずれにしろ、こうした人達の「受けお圓然の
サヌビスず思っおる態床」は倉わらんでしょ

 た、薄れ行く意識の䞭で「あの時、譊告を聞いお埅避しずきゃよかった」
っお思っおも圓人の責任やし仕方ないわな。

c.g.green

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
河原日本LSIカヌド(æ ª)です。

"Arita"さん、こんにちは。

> C蚀語の本をにはたいおい
> mallocしたメモリヌをもう䜿わないなら攟っおおけば
> 終了時に自動的に解攟されるので明瀺的にfreeしなくおも良い
> ず曞いおあるのですが、先日ある雑誌を芋るず
> 明瀺的にfreeしないずメモリヌリヌクになる
> ず曞かれおいたした。どちらが正しいのでしょうか。

私の読んでいるC蚀語の本にはたいおい、freeしろずあるのですが(^_^;)。

freeしなかったメモリヌがどうなるかはOSずアプリケヌションによっお違っおき
たす(^○^)。したがっお、「基本的な心埗ずしおは、芁らなくなったメモリヌはその
時点でfreeするのが良い」ずなりたす(^○^)。
僕は以䞋のようにしおリヌクを枛らす努力はしおいたすが。あんたり参考にはな
りたせんね(^○^)。

// 定矩
T* pT = NULL; // 割り圓おられおいないポむンタは必ずNULL

// 割り圓お
assert(pT); // 倚重割り圓おは蚱したせん
pT = (T*)malloc(sizeof(T));

// 開攟
//assert(pT == NULL); // 割り圓おられおいないのにfreeするな!。(䜿えな
いずきもある)
free(pT);
pT = NULL;

Dairyo Gokan

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
"Takemoto,Satoshi" wrote:
> ここに茶々。
> 「本圓のプログラマ」ず聞くず、
> 「はPascalを曞かない」ず続けおしたう私。(^^;
>
> 解らない人の方が倚いんだろうな、このネタ。
>
> ん「本圓の」じゃなくお「本物の」だったっけ

 原題は「Real programmer don't write Pascal.」だったはず。 死にかけ
おる脳现胞の蚘録が正しければ、1983幎4月号あたりの「Bit」誌に、翻蚳蚘事
が茉っおたす。

Dairyo Gokan

unread,
Feb 17, 2000, 3:00:00 AM2/17/00
to
Junn Ohta wrote:
> じ぀はDOSの堎合は、free()せずに終了しおしたっおも
> たったく安党なんです。
>
> DOSは640768KBのコンベンショナルメモリヌずいうも
> のをもっおいお、すべおのプロセスはその䞭で実行され
> たす。そのコンベンショナルメモリヌの先頭にはDOSの
> システムやデバむスドラむバヌ、コマンドむンタプリタ
> ヌなどが垞駐しおいお、プログラムを実行するずそれら
> を陀いた空きスペヌス党䜓がどかんずプロセスに枡され
> たす。プロセスはその内郚をmalloc()などで自由に䜿っ
> およいわけです。

 FM-11BSずか、メモリ空間䞊にVRAM等がマップされおいない特殊な環境では
960KBのコンベンショナルメモリを確保できる機皮もありたす。
 
 が、それはおいずいお ...

 DOSでプログラムを実行する、COMモデルの堎合、残りの空きメモリ党䜓が
プロセスに枡されたすが、malloc()は最終的にシステムコヌル(DOSのINT21H
ファンクション)を呌び出すので、そのたたではmalloc()できたせん。
 tinyモデルでコンパむルされた実行ファむルは、スタヌトアップルヌチン
内のコヌドで必芁メモリ(最倧64KB)を残しお、OSに䞀旊メモリを返したす。

 EXEモデルの堎合、EXEヘッダ内にそのプログラムが必芁ずするスタック量
のメモリだけを確保し、スタックポむンタを初期化し埌、プログラムが実行
されたす。

 たた、_dos_allocmem()/_dosfree()ずいった、INT21H盎結のメモリ関数では
なく、暙準のmalloc()/free()では、芁求された単䜍でメモリをその郜床OSに
芁求するのではなく、固定長のブロック単䜍で領域芁求/解攟しおいたす。
 これはファむルI/Oず同様システムコヌルの呌び出しを枛らすのず、小ブロ
ックの確保/解攟の繰り返しによる断片化を防ぐためだず思いたす。

> むしろDOSで問題になるのは、子プロセスを生成するず
> きです。子プロセス生成のシステムコヌルを呌ぶず、そ
> のシステムコヌルは芪プロセスのメモリヌ䜿甚状態を調
> べお、䜿甚䞭の末尟の領域より埌ろをいったんすべお解
> 攟し、そこに子プロセスをロヌドしおメモリヌ管理を子
> プロセスに明け枡したす。

 システムコヌル(DOSのINT21Hファンクション)ではそこたで面倒芋おくれ
たせん。 メむンプロセスは、もし子プロセスのロヌドにメモリが䞍足する
ようなら、子プロセスを実行する前に、䜿っおいないメモリ領域をfree()
しお、OSに返さなければなりたせん。

 OSにはmalloc()された領域が、実際にプロセス内で䜿われおいるか知る
すべがありたせん。 システムコヌル(OS内郚の凊理)が、メモリの䜿甚状態
を知る方法は、領域がプロセスに割り圓おられ(malloc())おいるか、そう
でないか(free())のみです。
 ですから、OSによる子プロセス生成時に、芪プロセスの領域を勝手に解攟
しお子プロセスを実行するこずはありたせん。

> したがっお、たずえば芪プロセスがロヌドされた埌で倧
> きな領域Aをmalloc()し、小さな領域Bをmalloc()し、倧
> きな領域Aをfree()したずするず、おそらく芪プロセス
> の本䜓のあずに領域Aの残骞の空き領域があっお、その
> あずに䜿甚䞭の領域Bが存圚するこずになりたす。

 DOSでは、ペヌゞング方匏のメモリ管理機構をサポヌトしおいないので、
おっしゃるずうりですが ...

> この状態で子プロセスを生成するず、子プロセスに枡さ
> れるのは領域Bの盎埌からのメモリヌ空間ずなり、芪プ
> ロセスがfree()した領域Aのメモリヌがたずえ実際にOS
> に返华されおいたずしおも、そのこずは子プロセスが䜿
> 甚可胜なメモリヌ空間を増やすこずにはたったく寄䞎し
> ないわけです。

 暙準関数のmalloc()にはメモリ確保の際の现かい指定が可胜な仕様は(環境
に䟝存するので)盛り蟌たれおいたせんが、少なくずも、DOSファンクション
(INT21H)では、子プロセスのロヌドず実行に必芁な領域が解攟された領域Aに
収たるなら、領域Aがあった領域に再床領域を確保するよう指定できたす。

> ここで必芁になるのは、メモリヌ管理に぀いおのシステ
> ム寄りの知識であり、「短呜の領域を確保した状態で長
> 呜の領域を確保したりしない」ずいうようなストラテゞ
> ヌであっお、「malloc()したものは䞍芁になったらfree
> ()する」ずいうレベルの䞀般論は圹に立ちたせん。

 「malloc()したものは䞍芁になったらfree()する」ずいう䞀般論だけで
なく、「寿呜の長い領域はあらかじめ先に確保しおおく」ずいうルヌルで
十分な問題ずいう気がしたす。

 たた、ANSI-Cの暙準関数は暙準ラむブラリずしお有甚ですが、C蚀語の蚀語
仕様の本質的な郚分ではありたせん。

 可搬性を別にすれば、ANSI-Cの芏定する「malloc()/free()」を䜿うこずは
C蚀語を䜿う際に匷制されるべき問題でもありたせんから、気に入らなければ
内郚で自動ガヌベヌゞコレクションする独自仕様のmalloc()/free()関数なり
を䜜成すればよいだけではないですか もっずも、関数が返す(枡す)倀は
ポむンタではなくハンドルにしなければなりたせんし、ポむンタを䜿うほず
んどのラむブラリ関数の曞き倉えが必芁になるかもしれたせんが。

> いずれにしおも、free()しおも意味がなく、行う凊理が
> 増えるだけ無駄な堎合(UNIXのプロセス終了時)や、䞍芁
> になった段階でfree()するだけでは十分ではない(DOSの
> 子プロセス生成時)などがあるわけです。い぀malloc()
> しおい぀free()するかはアプリケヌションの性栌などさ
> たざたな状況を考慮しお蚭蚈するべきで、「䞍芁になっ
> たらfree()する」ずいう単现胞な方針ですべおを貫こう
> ずするのは間違いだず思っおいたす。

 「䞍芁になったらfree()する」で十分ぢゃないですか free()を呌び出し
お実際にOSがメモリを解攟するのにかかるオヌバヌヘッドなんお、ほずんど
ないに等しいず思いたすが なんで、その皋床のコトを特殊な䟋を匕き合い
に出しおたで、サボるコトに固執したがるのか理由がわかりたせん。

Takemoto,Satoshi

unread,
Feb 18, 2000, 3:00:00 AM2/18/00
to
竹本です。
倧倉たじめな議論の最䞭に茶々で倱瀌したす。

Dairyo Gokan wrote:

>  「効率的」ぢゃなくお、単なる「手抜き」プログラミングでしょ

それはそうです。(^^)

> > malloc(),free() を必ず組で呌べば安党だっおこずにはならないず
> > 思いたす。free() し忘れるっおのが良くあるこずなのは認めるけ
> > ど、どちらかずいえば、free()したのに、たた䜿っおしたったずか
> > の方が危ないわけですよね。free()しなければ、そういうこずには
> > なりたせん。
>

>  こんなコト、本気で蚀っおおられるのでしょうか

河野さんは、こういう事を、あえお「本気で」蚀う人です。

初心者の「のび倪君的」願望を「ドラえもん的」に解決しようずするんです。
ママのび倪、malloc()したメモリはfree()しなさい。
のび倪あぁあ、片付けるの、぀い忘れちゃうんだよなぁ。
ドラえもんはい、「がべヌじ・これくたぁ」(ゞャゞャゞャヌン)
みたいな。違うかも...(^^;

他日、fj.sci.mathにお
 のび倪あぁあ、どう芋たっお 0.999... < 1 じゃないかぁ。
 ドラえもんはい、「ちょうじゅんかいせきぃ」(ゞャゞャゞャヌン)
これも違う(^^;;;

倚分fj歎があたりに長いため、
ありふれたツッコミに飜きおるんじゃないかず思いたす。
だからボケかえす、ず蚀うか、
「取りあえず党郚拟っお、転がす」ず蚀うか。

そういう芞颚^H^Hスタむルなんです、倚分。(^^;

>  少なくずも、本圓のプログラマは「感に頌っお free() する」なんおプロ
> グラミングスタむルじゃないこずだけは確かです。

ここに茶々。


「本圓のプログラマ」ず聞くず、
「はPascalを曞かない」ず続けおしたう私。(^^;

解らない人の方が倚いんだろうな、このネタ。

今なら「SmallTalkを曞かない」か、「rubyを曞かない」か。
もしかしお「JAVAを曞かない」

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Feb 18, 2000, 3:00:00 AM2/18/00
to
久野です。

oh...@src.ricoh.co.jpさん:
> これ、なんだかすごく玍埗です。しかしこの分類法でいくず河野さん
> は䜕屋さんになるのかな。:-)

気分屋。 久野

P.S. わヌ河野さんごめん! 面癜いず぀い曞いおしたうんだよヌ。

Nakayama Ryu~ji

unread,
Feb 18, 2000, 3:00:00 AM2/18/00
to
Article <38ACB403...@cv.sony.co.jp> にお、
"Takemoto,Satoshi" <take...@cv.sony.co.jp> さん、

> >  少なくずも、本圓のプログラマは「感に頌っお free() する」なんおプロ
> > グラミングスタむルじゃないこずだけは確かです。
>
> ここに茶々。
> 「本圓のプログラマ」ず聞くず、
> 「はPascalを曞かない」ず続けおしたう私。(^^;

...


> ん「本圓の」じゃなくお「本物の」だったっけ

぀いでに蚀っおおくず「曞かない」じゃなくお「䜿わない」ではなかったでしょ
うか?

少なくずも、bitに翻蚳が茉った時の邊題は「䜿わない」でした。

原文は倚分、
http://www.edfac.usyd.edu.au/staff/souters/Humour/Real.Programmer.Stories.html

--
䞭山隆二
nakayam...@lab.ntt.co.jp

Shinji Kono

unread,
Feb 18, 2000, 3:00:00 AM2/18/00
to
河野 真治@琉球倧情報工孊です。

In article <38ACB403...@cv.sony.co.jp> ,
"Takemoto,Satoshi" <take...@cv.sony.co.jp> writes

>河野さんは、こういう事を、あえお「本気で」蚀う人です。

そういうや぀です。僕は研究の方だから、そういうこずをいうべきだずも
思うしね。

>初心者の「のび倪君的」願望を「ドラえもん的」に解決しようずするんです。
> ママのび倪、malloc()したメモリはfree()しなさい。
> のび倪あぁあ、片付けるの、぀い忘れちゃうんだよなぁ。
> ドラえもんはい、「がべヌじ・これくたぁ」(ゞャゞャゞャヌン)
>みたいな。違うかも...(^^;

たぁねぇ。でも、malloc()したらfree()すればいいじゃん。っおのは、
本圓は、そんなに簡単じゃないよ。実際、
い぀も(malloc() したならば、い぀か free())
っおのをGC抜きに怜蚌しようず思ったら、䞀般的には䞍可胜です。
(本圓のプログラマは、それをどうやっお保蚌しおいるのだろう?
自分で reference countするっおのが C++ では倚いんじゃないか
なぁ)

それよりも、GCの正圓性を蚌明するほうがやさしかったりしたす。
こっちは、プログラムの振舞ではなくお、デヌタ構造の正圓性ずし
お瀺せたすから。

>そういう芞颚^H^Hスタむルなんです、倚分。(^^;

おもしろいでしょ?

In article <88i807$2lr$1...@epsongw6.epson.co.jp>, "Narita Takaoki" writes:
> 河野さん的には「人間のプログラムにおけるメモリ管理構造の蚭
> 蚈誀謬性を考慮するず、誀った構造に蚭蚈し難い GC による管理
> を導入した方が、より安党であろう」ずでも蚀いたかったのではな
> いでしょうかね。

たぁ、そんなずころです。

> 少なくずも、プログラミングずいう仕事の結果の成果物の品質に、
> 責任を負う職業プログラマから芋れば、そんな態床で仕事をする
> なら蟞めおくれず蚀われるでしょうね。

確かに、メモリリヌクを甘く芋る気はないです。それはやっちゃいけない
こず。でも、それを防ぐ䞀぀の方法ずしお、
block release reserve -> malloc in module
module release -> block memory release
ずいう手法があっお、malloc -> exit っおいうのは、そういう安党サむド
の手法の䞀぀だず指摘したいな。

object の destruct だず、object がOSのシステムリ゜ヌスを握っ
おいるこずもあるので、どうしおも呌ぶ必芁があるずいうのも理解
できるんですが、玍埗できないずころも倚いですね。

> たあ、研究宀の UNIX 云々ずは蚀わないですが、実隓宀レベル
> の話ず実際のフィヌルドでの話は別ですねっお事でしょうかね。

たぁ、それはそうでしょうけど。

Junn Ohta

unread,
Feb 18, 2000, 3:00:00 AM2/18/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<38ACDDAE...@can.bekkoame.ne.jp>で
na...@can.bekkoame.ne.jpさんは曞きたした。

>  DOSでプログラムを実行する、COMモデルの堎合、残りの空きメモリ党䜓が
> プロセスに枡されたすが、malloc()は最終的にシステムコヌル(DOSのINT21H
> ファンクション)を呌び出すので、そのたたではmalloc()できたせん。
> ...

なるほど、このあたりは私の知識では埌神さんに立ち打
ちできたせんね。おおむね了解です。

>  EXEモデルの堎合、EXEヘッダ内にそのプログラムが必芁ずするスタック量
> のメモリだけを確保し、スタックポむンタを初期化し埌、プログラムが実行
> されたす。

これによっお残りの空き領域すべおがmalloc()可胜なヒ
ヌプずなるわけですよね。

>  OSにはmalloc()された領域が、実際にプロセス内で䜿われおいるか知る
> すべがありたせん。 システムコヌル(OS内郚の凊理)が、メモリの䜿甚状態
> を知る方法は、領域がプロセスに割り圓おられ(malloc())おいるか、そう
> でないか(free())のみです。
>  ですから、OSによる子プロセス生成時に、芪プロセスの領域を勝手に解攟
> しお子プロセスを実行するこずはありたせん。

私が蚀いたかったのは、malloc()されおいる領域だけを
残しお、あずの郚分を子プロセスに枡すずいうこずです。
芪プロセスの「領域」ずいうこずばの定矩をあいたいに
しおおいたのが悪かったのですが...。

>  「䞍芁になったらfree()する」で十分ぢゃないですか free()を呌び出し
> お実際にOSがメモリを解攟するのにかかるオヌバヌヘッドなんお、ほずんど
> ないに等しいず思いたすが

あれ? 勘違いされおしたったか...。

「free()を呌び出しお実際にOSがメモリを解攟するのに
かかるオヌバヌヘッド」ではなくお、「プログラムの終
了時にそれたでfree()されおいない領域をすべお調べあ
げおfree()するのに必芁なオヌバヌヘッド」を問題にし
おいるのです。

なお、「free()する」には「free()された領域がこの次
にmalloc()されおよいようにメモリヌ管理デヌタの再構
成を行う」オヌバヌヘッドが含たれおいたす。

> なんで、その皋床のコトを特殊な䟋を匕き合い
> に出しおたで、サボるコトに固執したがるのか理由がわかりたせん。

「サボるコト」に固執しおいるわけではなくお「サボっ
おも安党かどうかを知るコト」に固執しおいるのです。
「絶察にサボらないず決めおおいお、サボったずきにど
うなるかを知らずにすたせる」のはよくない習慣だずい
うこずです。

Yoshiki Kataoka

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
片岡です。


>そうずは思わないな。倚量に malloc した埌、ランダムな順序で free
>するず極めお遅くなる malloc はいく぀かありたす。このような堎

それは「できの悪い実装」であっお、「仕様」ずは別な話です。

どうしおも珟堎ずしお芋過ごすわけに行かない堎合は、
条件コンパむルあたりを怜蚎すべき皮類の問題です。


>exit 時に、どの領域のメモリが残るかどうかは、malloc ずは
>独立の問題です。そのあたりをごっちゃにすべきではないです。

埡意。
ごっちゃにするから「䞀般的に」 free 䞍芁ずいう台詞に至る
のでしょう。malloc はメモリ管理、exit はプロセス管理、
それぞれ担圓分野の違うものです。


>良いっお教えたす。exit()がcloseするのは仕様ですし、exit()で
>プロセスのメモリ領域が解攟されるのも仕様ですよね。

「アプリがしたこず」党おが解攟されるわけではないし、
逆に関数の独断で解攟しおよい資源ばかりずも限りたせん。

ある特定の堎面で、やるべきこずをサボっおも助かるこずを
知っおいるからずいっお、それが䞀般論に聞こえる教え方は
望たしくないずいっおいるのです。ここで蚀う「やるべきこず」
ずは、借りたら返す、開けたら閉める、自分で蒔いた皮の
萜ずし前は芪に頌らない、などのこずです

>ようは、ちゃんず理解しおいればいいのでしょう?

そう、ちゃんず理解させるべきなのです。

出匵のため次のコメントは週間匱遅れたす


^^ Hiroshi Migimatsu

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to

 なので、「終了時ならば明瀺的にfree する必芁がない」ずいう方が
 普通でしょう。

こい぀はその通りですけれど、

 > mallocしたメモリヌをもう䜿わないなら攟っおおけば
 > 終了時に自動的に解攟されるので明瀺的にfreeしなくおも良い

こういう䞀般化っおのも問題ないですかね

本来は「返华すべき」であるが、ほっおおいお問題ない堎合に
限り「 (exit でも free でもいいが) 最埌にたずめおやれば
よろしい」っおだけのこずで。

 free をいちいちするので時間を食うのはばかばかしいけど、
 それで資源が圧迫されたらばかばかしい、じゃ枈たない堎合
 もあるでしょうから。
--
みん぀ - mi...@minz.org - http://www.minz.org/ - みぎた぀・ひろし

Iwao Watanabe

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message news:88hil5$556$1...@ns.src.ricoh.co.jp...

> 䜿っおいるかをプログラムを曞くずきに考慮するこずは
> 倧事なのだけど、たずえばプログラムでずヌっず抱えお
> いるべきデヌタがあっお、それがプログラムの終了ずず
> もに䞍芁になるずいう堎合なら、それをわざわざfree()
> するこたあないでしょ、ずいうのが私の感芚に近いでし
> ょうか。

私もこれに䌌たような感芚でもっお、quick & dirty プログラムでは
fcloseしなかったりXtDestroyApplicationContextを呌ばなかったりしたす。

おいうか、埌者を呌び出しおいるプログラムは、たず芋ないですね。
Xではプログラマヌの意識レベルでサヌバヌ偎のリ゜ヌスを䞁寧に
砎棄しお回るプログラムを曞く方が珍しいような気がしたす。
たいおいはリ゜ヌスの砎棄をGUIラむブラリやXの仕掛けに任せおしたいたす。
サヌバヌずの接続が切れたら、自動的に砎棄されるこずになっおいたす。

XImageオブゞェクトもファむルから読み蟌んだ画像ず亀換するずきならずもかく
終了時に砎棄しおいないものがほずんどなので、クラむアント偎でも
堎合によっおは察象によっおは䞀般的かもしれたせん。

Furuta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
Shinji Kono <ko...@ie.u-ryukyu.ac.jp> wrote in message
news:433.95...@rananim.ie.u-ryukyu.ac.jp...
> 河野 真治@琉球倧情報工孊です。
>
> In article <88julv$r7l$1...@ns.src.ricoh.co.jp> ,
> oh...@src.ricoh.co.jp (Junn Ohta) writes
> >そういうOSでプログラムが異垞終了したずきは、確保さ
> >れた共有メモリヌはどうなっちゃうんでしょう? もしか
> >しおリヌクするんですか?

> In article <38AB7D...@geocities.co.jp>, Arita writes:
䞭略


> なので、「終了時ならば明瀺的にfree する必芁がない」ずいう方が
> 普通でしょう。

> それでも free しろっおいうのっお、せっかく塵取りの䞊にのっお
> いるのに、ピンセットで䞀぀䞀぀ゎミ箱に移しおいるようなもので
> す。
䟋のOSではそうはいきたせんよ。そういうOSがある以䞊、freeを䜿わないのは、移怍性を
損ねたす。


Furuta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to

^^ Hiroshi Migimatsu <mi...@minz.org> wrote in message
news:88jtrm$898$1...@pooh.isoternet.org...
>
>  > そういうこずをしおOSやラむブラリヌ仕様䞊䜕かメリッ
>  > トがあるのか、ちょっず想像が぀きたせん。
>  無いですよ、党く。
メリットがないず曞いた぀もりです。

> んヌ。䞀郚はmalloc()盞圓のものが共有メモリの割り圓お
> ず等䟡だったりもしたすんで、そういうのはあるかも。

ないず思っおいたしたが、あったんですか。
Cの仕様䞊党く問題ありたせんが、マルチタスクのOSずしおは䞍適切ですね。
勉匷になりたす。

Furuta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88kdvq$2g2$1...@ns.src.ricoh.co.jp...
> fj.comp.lang.c,fj.comp.lang.c++の蚘事<38ADAE32...@can.bekkoame.ne.jp>で
> na...@can.bekkoame.ne.jpさんは曞きたした。
> >  「技術」ぢゃなくお「ルヌル」でしょう。 んで、それを尊守するかどうか
> > は、個々の垂民たたはプログラマの「道埳(モラル)」に掛かっおるわけ。

> そういうこずなら、ルヌルを遵守しようずする人はその
> ルヌルがどういう意味をもっおいお、どうしお守らなけ
> ればならないかを理解する必芁があるだろうず私は考え
> たす。理解せずに蚀われたこずを守るだけ、ずいう姿勢
> が望たしいものであるずは思いたせん。

今回の問題では、仕様を守るこずが、移怍性の向䞊に぀ながる。
なぜなら、仕様を守るこずで、移怍性を保っおいるからです。
仕様を守らなかったら、移怍性が倱われお圓然のこずだから。
が、適圓な理由でしょうか

Yoshiki Kataoka

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
片岡出匵先からモバむル接続です。


>元蚘事の方は、そのようなmalloc()の䜿いかたをしおい
>るずきに䜿い終わったメモリヌをfree()しなくおよいか
>ずお尋ねなのではないでしょう。

いや、お尋ねなのだず思いたすよ。

「malloc したら free すべきか 長期皌動を陀く」

こんな陀倖が曞けるような人は、
そもそもこんな質問をする必芁がない人でしょう。

もっずも、玛糟しおいる様を芋お楜しみたかったのなら
別ですが。


>むしろ、そのようなプログラムが長々ず皌働したあずで
>仕事を終えお終了する盎前に、それたで確保しおいたこ
>たごたずしたメモリヌをすべおの個別に解攟するこずが
>本質的に必芁なのかをお尋ねなのだず思いたす。

どうしお「こたごた」ず感じるのでしょうか。

資源を芁求する各モゞュヌルの䞭で、自分の埌片付けだけを
やっおいればよいこずで、埌片付けの数をパヌツの数で割る
ずリヌズナブルな数になっおいるはずです。

始めに exit ありき、で考えるこずによる数のトリックでしか
ないでしょう。

このあたりは倪田さんずは察立しおいないず思っおいたしたが

Furuta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
Shinji Kono <ko...@ie.u-ryukyu.ac.jp> wrote in message
news:2250.95...@rananim.ie.u-ryukyu.ac.jp...
> 河野 真治@琉球倧情報工孊です。
>
> In article <88m0qa$29e$1...@news.lcv.ne.jp> ,
> "Furuta" <furut...@ma2.justnet.ne.jp> writes

> >今回の問題では、仕様を守るこずが、移怍性の向䞊に぀ながる。
> >なぜなら、仕様を守るこずで、移怍性を保っおいるからです。
>
> exit() ず free() の組合せが移怍性の肝であり、それを分離しお
> も意味はありたせん。

UNIXのプロセスの保護に䟝存しおいたすね。
それ以倖の環境のこずを考慮しおいたせん。
実際には、Windowsのような䜙りよくないシステムの方が倚いのですから。

UNIXでも物によっおは、mallocで共有メモリを確保する物もありたすし。
exitで必ずメモリを解攟するずいうこずは芏定されおいたせん。
よっお、freeを䜿っおメモリを解攟しなければ、OSによっおはトラブルの原因ずなりた
す。

ただし、exitで必ずメモリを解攟するずいうこずは芏定されおいるOSだけをタヌゲットに
するなら話は別ですが。

> >仕様を守らなかったら、移怍性が倱われお圓然のこずだから。
> >が、適圓な理由でしょうか
>
> 適圓? 移怍性が組み蟌み機噚ずかを指すなら、malloc()/free()を
> 予枬可胜な範囲で凊理するこずの難しさに着目すべきですね。
移怍性ずは、違う環境でも動くこずが保蚌されるず蚀うこずです。
たずえば、UNIXでもDOSでもWindowsでも問題なく動くず蚀うこずです。
たあ組み蟌み機噚も䞀応その䞭に入りたすが(ただし、仕様にあっおいるこず)。
蚀葉の意味を誀解しおいたせんか

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88m0qa$29e$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。

> 今回の問題では、仕様を守るこずが、移怍性の向䞊に぀ながる。
> なぜなら、仕様を守るこずで、移怍性を保っおいるからです。

仕様ずおっしゃいたすが、それをいうなら

malloc()/free()の組み合わせではOSから割り圓おお
もらったメモリヌをOSに返华したず保蚌するこずは
プログラムからでは䞍可胜

ずいうのがmalloc()/free()ずいうむンタヌフェヌスの
仕様です。いいかえれば

malloc()したメモリヌすべおをfree()しないで終了
するプログラムはトラブルを起こす、ずいう仕様の
malloc()/free()むンタヌフェヌスを実装するこずは
malloc()/free()むンタヌフェヌスの移怍性を䜎䞋さ
せる重倧な違反

だろうずいうこずです。

ちなみに、ANSI Cではfree()に぀いお「領域を解攟す
る、すなわち、以降のmalloc()でその領域が再利甚さ
れるようにする」ずいう意味のこずが曞かれおいたは
ずです。

その特殊な環境のmalloc()やfree()のマニュアルにど
ういうこずが曞かれおいるのか興味ありたすね。

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88mb5p$2l6$1...@news01bi.so-net.ne.jp>で
kat...@ka2.so-net.ne.jpさんは曞きたした。
> free せずに exit するこずこそ、
> 退瀟時の消灯確認でいきなりブレヌカヌを萜ずすようなものです。

消えたかどうかfree()で確認できたすか?

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88m8rr$1cq$1...@news01ch.so-net.ne.jp>で
kat...@ka2.so-net.ne.jpさんは曞きたした。
> 片岡出匵先からモバむル接続です。

ごくろうさたです。

> いや、お尋ねなのだず思いたすよ。
> 「malloc したら free すべきか 長期皌動を陀く」
> こんな陀倖が曞けるような人は、
> そもそもこんな質問をする必芁がない人でしょう。

元蚘事の質問は「終了時に自動的に解攟される」ず「メ
モリヌリヌクになる」のどちらが正しいのか、ずいうも
のですから、自分がmalloc()したメモリヌの「プロセス
終了時の挙動」を尋ねおいるのは明らかです。

# プロセス皌働䞭に䞍芁なメモリヌをそのたたかかえお
# いるこずを「メモリヌリヌク」ずはいわない。

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88ma2i$5qd$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。

> UNIXでも物によっおは、mallocで共有メモリを確保する物もありたすし。
> exitで必ずメモリを解攟するずいうこずは芏定されおいたせん。
> よっお、freeを䜿っおメモリを解攟しなければ、OSによっおはトラブルの原因ずなりた
> す。

そういう環境でmalloc()/free()のような「メモリヌを
OSに返华できたかプログラムから確認のしようがない」
むンタヌフェヌスを䜿うこずのほうが、よほどトラブル
の原因のような気がしたすが、いかがですか?

プログラムで責任をもっおOSにメモリヌを返华するこず
を奚励するなら、そのための関数は少なくずも正しく返
华できたかどうかを返り倀ずしお返す仕様のものでなけ
ればならないでしょう。free()はそうではない。

ゎミの比喩でいえば、free()するずいうのはゎミ箱のほ
うにゎミを攟り投げお、あずは知らんぷりをしおいるよ
うなものです。free()を䜿うかぎり、それ以䞊のこずは
そもそもできないのです。

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88mel0$7vi$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。
> free()した時点ではOSに返されなくずも、終了時には、確実に返华される必芁がありた
> す。
> それをしない堎合は、malloc/free自身に問題があるずいうこずでしょう。

それは正しくないず思いたすよ。

free()した時点でOSに返せないのならmalloc()/free()
がOSにメモリヌを返す䞀般的な方法はありたせん。どこ
にもそのためのフックはないのですから。

そういうものでも「返せる」ようになっおいるなら、そ
のメモリヌがmalloc()されたたたのものでもfree()で解
攟枈みのものでも区別なくOSに返せるようになっおいる
のが圓然でしょう。

> 芁するに、freeを䜿わないためにトラブルが起こった堎合は、プログラマヌの責任だず思
> いたす。

free()を䜿っおもプログラマヌが責任をずれるわけでは
ない、ずいうこずを私は瀺した぀もりです。

> mallocは、どこからリ゜ヌスを埗るのかが芏定されおいたせん。
> 共有メモリから確保するOSもあるようです。
> しかし、仕様には反しおはいないず思いたす(マルチタスクOSずしおは䞍適ですが)。
> こういう環境もある以䞊、freeを䜿っおメモリを解攟しなければ、トラブルを起こす環境
> が存圚するので、移怍性が䜎いずいえるでしょう。

それは「free()しないで終了するプログラムの移怍性が
䜎い」のではなくお「malloc()/free()ずいうむンタヌ
フェヌスの移怍性が䜎い」のです。

> 共有メモリから確保するOSもあるようです。

ずいうような環境では、そもそもmalloc()/free()をほ
かのOSず同じ目的で䜿うべきではないでしょう。

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88mf92$86p$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。
> 䟋の共有メモリを䜿うタむプだったら、freeを䜿わないず、倧倉ですから、䞀応曞いおお
> くべきだず思いたす。

malloc()/free()がいかにも移怍性がありそうなふりを
しおそういう方針で実装されおいる環境があるこずに぀
いおは、事実ならたしかに問題ですし、そのこずに觊れ
おおくのは悪いこずではないですね。

ただ、そういう環境なら、おそらくmalloc()されおいる
すべおのメモリヌを䞀埋にOSに返华するような関数が甚
意されおいるのではないかず思いたす。

すべおのメモリヌ割り圓おはmalloc()経由で行われるの
でしょうし、malloc()/free()パッケヌゞはどれだけの
メモリヌが䜿甚䞭であるかに぀いお知っおいるわけです
から、malloc()されたたたのものであれ、free()された
ものであれ、自分を通じお割り圓おられたメモリヌをす
べおOSに返すのは簡単なこずです。

しかも、malloc()/free()パッケヌゞのほうですべおの
メモリヌをOSに返华するなら、malloc()を呌び出したプ
ログラムの偎で自分でデヌタ構造をたどっおfree()した
くるよりも安党確実に凊理が行えるわけですし、free()
では䞍可胜な「ちゃんずOSに返せたよ」情報もプログラ
ム偎に䌝えるこずができるわけです。

そういう環境を甚意しないで、共有メモリヌをただその
たた䜿っおmalloc()/free()を実装しおいるOSがあるず
いうのは、私には信じがたいこずですが。

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88mgil$lbs$1...@ns.src.ricoh.co.jp>で
私は曞きたした。

> > 芁するに、freeを䜿わないためにトラブルが起こった堎合は、プログラマヌの責任だず思
> > いたす。
>
> free()を䜿っおもプログラマヌが責任をずれるわけでは
> ない、ずいうこずを私は瀺した぀もりです。

「プロセスの終了前に自分ですべおfree()すればOSにす
べおのメモリヌを返华したこずになる」ずいうmalloc()
/free()の実装にはどんなものがあり埗るか考えおみた
した。可胜性があるずしたらこんなものでしょう。

(1) malloc()ずfree()はじ぀はOSのメモリヌ確保/解攟
のシステムコヌルをそのたた呌んでいるだけ。

これでは现かいメモリヌ確保/解攟のタむミングで
システムコヌルが発生するわけで、たったく非効率
です。しかも解攟にfree()を䜿う以䞊、正しく解攟
されたかどうかをチェックする方法が存圚しないわ
けで、危険このうえない。こんな圢でシステムコヌ
ルにmalloc()/free()の皮をかぶせるずいうのはあ
っおはならないこずです。

(2) malloc()は必芁に応じお倧きな単䜍でOSからメモリ
ヌを確保しお、それを现切れにしお呌び出し偎に返
す。free()は返されたメモリヌがたずたった単䜍に
なるずOSにそれを返す。

境界条件が存圚するこずになり、その境界で现かい
malloc()/free()を繰り返すず効率が萜ちたす。こ
のずきの効率はmalloc()が内郚でメモリヌ管理をし
おいる分だけ(1)よりさらに悪くなりたす。

(3) (2)ず同じだが、free()ですべおのメモリヌが解攟
されたずきだけOSにそれらのメモリヌを返す。

本質的に(2)ず同じで、メモリヌがひず぀も確保さ
れおいない状態で现かいmalloc()/free()を繰り返
すず(2)ず同じ状態になりたす。

「プロセスの終了前に自分ですべおfree()すればトラブ
ルを起こさなくおすむ」ずいう䞻匵の人で、それが可胜
になるようなmalloc()/free()の実装を瀺せる人はいら
っしゃいたすか?

Junn Ohta

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<2568.95...@rananim.ie.u-ryukyu.ac.jp>で
ko...@ie.u-ryukyu.ac.jpさんは曞きたした。
> 䟋えば、クロスリファレンスのプログラムを考えたしょう。こい぀
> は、クロスリファレンスを䟋えばB-Treeかなんかで䜜っおいきたす。
> これが解攟されるのは、クロスリファレンスが終了しお、衚瀺し終
> った時でしょう。もちろん、プログラムは、free()せずに exit()
> しお構いたせん。さお、これを、free() した時の蚈算量はいく぀
> でしょうか?

ひず぀の芁玠を怜玢しお解攟するコストがO(log n)ずす
るず、n個の芁玠があるからO(n log n)かな? logの底は
B朚の構造によるでしょう。

なかなかよい䟋を出されたしたね。さらに駄目抌し。

「プロセスの終了時に自分ですべおfree()すべきだ」ず
お考えの人は、free()にどれだけのコストがかかるかあ
たり考えおいらっしゃらないようです。

free()ではそれ以降のmalloc()で領域が再利甚されるよ
うに、解攟されたメモリヌをフリヌリストに぀なぎなお
す必芁がありたす。それだけでもよけいなコストがかか
るのに、効率を考えたmalloc()/free()パッケヌゞだず、
メモリヌが有効に再利甚されるように、連続した小さな
ブロックがすべお解攟されたらそれらをたずめおひず぀
の倧きなブロックにしたりしたす。

぀たり「malloc()で確保したすべおのメモリヌを個別に
free()するコストの総蚈」は「確保したすべおのメモリ
ヌをたずめお解攟するコスト」より飛躍的に倧きくなる
ずいうこずです。

しかもこれらが䞊のO(n log n)で効いおくるわけですか
ら「個別にfree()するのはたいしたコストじゃない」ず
いう意芋には私もたったく同調できないです。

逆にいうず、終了時にすべおのメモリヌを解攟しなけれ
ばならない環境では、malloc()/free()むンタヌフェヌ
スにも再利甚を考えずにすべおのメモリヌを解攟する関
数が圓然存圚すべきで、それを䜿うこずのほうがいちい
ち個別にfree()を呌ぶより奚励されるべきでしょうね。

Dairyo Gokan

unread,
Feb 19, 2000, 3:00:00 AM2/19/00
to
Junn Ohta wrote:
> 消えたかどうかfree()で確認できたすか?

 それ蚀ったら、exit()でちゃんずプログラムが終了したかどうか確認でき
たすか? free()の実装が正しくお、malloc()したポむンタがfree()の匕数
ずしお枡されおれば、解攟されるのは仕様です。(OSにちゃんずメモリを戻す
かどうかはmalloc()/free()の実装に䟝存する個別の問題です)

 冷蔵庫のドア閉めたら、䞭のランプがちゃんず消えたかどうか確認でけん
のず䞀緒でせう。

Furuta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88m9sp$jcm$1...@ns.src.ricoh.co.jp...

> fj.comp.lang.c,fj.comp.lang.c++の蚘事<88m0qa$29e$1...@news.lcv.ne.jp>で
> furut...@ma2.justnet.ne.jpさんは曞きたした。
> > 今回の問題では、仕様を守るこずが、移怍性の向䞊に぀ながる。
> > なぜなら、仕様を守るこずで、移怍性を保っおいるからです。
>
> 仕様ずおっしゃいたすが、それをいうなら
>
> malloc()/free()の組み合わせではOSから割り圓おお
> もらったメモリヌをOSに返华したず保蚌するこずは
> プログラムからでは䞍可胜
> ずいうのがmalloc()/free()ずいうむンタヌフェヌスの
> 仕様です。いいかえれば
free()した時点ではOSに返されなくずも、終了時には、確実に返华される必芁がありた
す。
それをしない堎合は、malloc/free自身に問題があるずいうこずでしょう。
Cの仕様に適合しおも、OSには適合しおいないずいうこずでしょう。

> malloc()したメモリヌすべおをfree()しないで終了
> するプログラムはトラブルを起こす、ずいう仕様の
> malloc()/free()むンタヌフェヌスを実装するこずは
> malloc()/free()むンタヌフェヌスの移怍性を䜎䞋さ
> せる重倧な違反
> だろうずいうこずです。

必ずトラブルを起こす蚳ではなく、トラブルを起こしおも、仕様どうりに動いおいるから
しょうがない。
ずいうこずでしょう。

それずも、初期化されおいないポむンタヌのしめすアドレスに曞き蟌みを行った堎合トラ
ブルを起こすような仕様は、ポむンタヌの移怍性を䜎䞋させるずいうような感じで曞いた
のでしょうか

もし、freeを䜿っおメモリヌをちゃんず解攟しないために動䜜しないこずは、Cのシステ
ムずしおは問題ありたせんが、freeでちゃんず解攟したこずによりトラブルが起こるよう
なこずは、システムに異垞がない限り起こりたせん。
芁するに、freeを䜿わないためにトラブルが起こった堎合は、プログラマヌの責任だず思
いたす。

> ちなみに、ANSI Cではfree()に぀いお「領域を解攟す
> る、すなわち、以降のmalloc()でその領域が再利甚さ
> れるようにする」ずいう意味のこずが曞かれおいたは
> ずです。

確保したたた解攟しなければ、空きメモリが枛りたす。

Furuta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88mdaq$kef$2...@ns.src.ricoh.co.jp...
> fj.comp.lang.c,fj.comp.lang.c++の蚘事<88ma2i$5qd$1...@news.lcv.ne.jp>で
> furut...@ma2.justnet.ne.jpさんは曞きたした。

> プログラムで責任をもっおOSにメモリヌを返华するこず
> を奚励するなら、そのための関数は少なくずも正しく返
> 华できたかどうかを返り倀ずしお返す仕様のものでなけ
> ればならないでしょう。free()はそうではない。

それもそうですね。
たあ、返华に倱敗されおもどうしようもありたせんし。
仕方ないですね。

䟋の共有メモリを䜿うタむプだったら、freeを䜿わないず、倧倉ですから、䞀応曞いおお
くべきだず思いたす。

> ゎミの比喩でいえば、free()するずいうのはゎミ箱のほ


> うにゎミを攟り投げお、あずは知らんぷりをしおいるよ
> うなものです。free()を䜿うかぎり、それ以䞊のこずは
> そもそもできないのです。

仕様では、私たちは、どうするこずもできたせんね。
Windowsでは、そんなような機胜が、䞀応搭茉されおいるようですが(mallocではないです
が)。

Yasuhiro.Yao

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to

> Unix のプロセスの抂念は、アドレス空間を別に持ち、プロセス盞
> 互の干枉を䜎くし、システム党䜓の安党性を高めるずいう思想です。
> そこでは、malloc()/free() はプロセス内郚の抂念であり、それが
> システムの安党性を䞊げおいるんです。そういう基本を理解せずに、
> WindowsやMS-DOSのような原始人レベルの垞識に執着しおどうする
> んです? もっず、珟代的な垞識を身に付けおください。

Windowsのシェアが䞖界䞀である間は 執着しなくおはいけない
人間は沢山いるでしょうねぇ。

-----
Yasuhiro.Yao


Yasuhiro.Yao

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to

Takashi.M <st...@messages.to> wrote in message
news:88k7nq$5nn$1...@news.alles.or.jp...
> 初めたしお、宗近高志です。
> free しなくおもメモリリヌクしないずかいう人がいたすが、
> それは自分の䜿うUNIX や NT に偏った話を
> しおいるからじゃないですか
>
> 僕はで画像を扱うプログラムや、DirectX系ゲヌムで
> うっかりメモリの解攟を忘れおいるのに気づかず、
> 䜕床かアプリをデバッグしおいるうちに、どんどんメモリずリ゜ヌスが
> 枛少しおいくのを経隓したこずがありたす。
> したいには、りィンドりが開けなくなっお再起動するハメになりたした。
> もちろん、free や Release を忘れずに行ったら、そんなこずは無くなりたし
た

ワヌキングセットが倧きくなり、結果ずしおペヌゞ違反やキャッシュミス
が発生しお性胜が䜎䞋する珟象ですね。
未䜿甚な未解攟領域が増えるず、こういった珟象が起きたす。

-----
Yasuhiro.Yao

MAEDA Atusi

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
oh...@src.ricoh.co.jp (Junn Ohta) writes:

> そういうものでも「返せる」ようになっおいるなら、そ
> のメモリヌがmalloc()されたたたのものでもfree()で解
> 攟枈みのものでも区別なくOSに返せるようになっおいる
> のが圓然でしょう。

ほんずだ。free()で解攟できるずしたら、圓然exit()でも解攟できるはずです
ね。だずするず、free()したほうが良い堎合がもしありうるずしたら、
プログラムが異垞終了しおfree()もexit()も呌ばれないず、メモリがOSに返
华されない環境がある。その時の被害を軜枛するため、なるべく早めにfree()
しおおく。
ずいう堎合でしょうか。 ただ、このような環境で可胜なのはせいぜい「軜枛」
にすぎたせんから(mallocしたメモリを䜿甚䞭に死んだらどうしようもない)、
このようなOSでは、信頌性のあるメモリ返华は本質的に䞍可胜ずいうこずにな
りたすね。freeするコヌドを入れたからずいっお安心できるものではない。

 やっぱり『実装の質が䜎い』ずしおあきらめるしかないのでは。

いずれにせよ、暙準Cの範囲を倖れた話ですね。(異垞終了した時に䜕が可胜か
なんお、移怍性の高い話ができるわけもない。)

前田敊叞

Yasuhiro.Yao

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to

> In article <88mgm7$8e4$1...@nw042.infoweb.ne.jp> ,
> "Yasuhiro.Yao" <pi...@ask.ne.jp> writes
> >Windowsのシェアが䞖界䞀である間は 執着しなくおはいけない
>>人間は沢山いるでしょうねぇ。
>
>れ? もしかしお、Windows でも、exit() の前に free()する
> 必芁はないこずをご存知ない?

必芁ないのは知っおいたす。

> こんな人ばっかりがプログラミングしおいるの? Windows っお...
> そりゃ、アプリケヌションが遅くなるわけだ。

プログラムの゚ラヌ怜出ツヌルであるNu○ega瀟の○ounds○heckerず蚀う
開発支揎ツヌルは、アプリ終了時に解攟しおいないメモリ領域が存圚
するず、メモリリヌクがあるずしお譊告したす。
たぁ、どれだけの人が○ounds○heckerを䜿っおいるかからはわかりたせんが、
高䟡な垂販品がするこずですから錯芚する人は倚いはずです。
そしおその状況を起因ずしお、終了時に党おfreeすべきずいう「垞識」が生たれお
したったり。
蚀語仕様や、OSのメモリ管理の仕様たで掘り䞋げおこずを考える人は少
ないですから、垂販品が「法埋」になっおしたうんですかね。
某有名OSの゜フトりェア䌚瀟が築いたような・・・・・笑
(Windows3.1の埌遺症っおのもあるかもこい぀は終了したアプリの未解攟
領域が沢山あるずよくご機嫌ななめになりたした。)

メモリを食い぀ぶしおOSや他の゜フトりェアの動䜜に圱響を䞎えなければ
それで良いず思いたすがね。
終了時は、そのアプリはそれ以䞊動䜜しないのだから、OSに任せおしたっお
構わないでしょ。

-----
Yasuhiro.yao

> メモリ管理の安党性の向䞊ず、速床の向䞊は䞡立したす。そしお、
> たこなメモリ管理ずそうでないものの差は、2-3倍あるず蚀われお
> いたす。もし、単玔に、malloc()/free() しおいるのならば、根性
> を入れ換える必芁がありたすね。぀たらない最適化よりも、本質的うきょう
> な問題だし、他のプロセスにも圱響を及がしたす。


>
> 䟋えば、クロスリファレンスのプログラムを考えたしょう。こい぀
> は、クロスリファレンスを䟋えばB-Treeかなんかで䜜っおいきたす。
> これが解攟されるのは、クロスリファレンスが終了しお、衚瀺し終
> った時でしょう。もちろん、プログラムは、free()せずに exit()
> しお構いたせん。さお、これを、free() した時の蚈算量はいく぀
> でしょうか?
>

> exit()時の䞍芁な党領域のfree()は、「蚈算量的にやっちゃいけな
> いプログラミング」であっお、プログラマは、そのような こずに鈍
> 感であっおはならないはずです。
>
> お、「最初に、たずめおmalloc()しお、そこから自分でセルを䜜っお
> ずっおいけば良い。最埌もfree()䞀発で良い」ですか? 良いずころに
> 気付きたしたね。それは、malloc()->sbrk()->exit() の再発明です。

Furuta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
MAEDA Atusi <ma...@is.uec.ac.jp> wrote in message
news:pypln4g...@tp560e.sowa.is.uec.ac.jp...
> "Furuta" <furut...@ma2.justnet.ne.jp> writes:
>
> > > 「質の悪い」実装でもプログラムがたずもに動くように
> > > するために、そのむンタヌフェヌスが本来意図しおいた
> > > 蚭蚈思想を曲げお利甚するこずをもっお「移怍性が向䞊
> > > した」ずおっしゃるのでしょうか?
> > exitの説明には、党おのメモリを解攟するこずはかかれおいないず思うのですが。
>
> いや、䟋えばSolaris2.6のマニュアルには、「プロセスのすべおのメモリを
> unmapする」ず曞いおありたす。元の質問者の方によれば、Windows䞊のVC++な
> ど他の実装に぀いおも終了時にはfree()しなくおよいず曞いおあるそうです。
> たた、䟋えばGNU C Libraryのドキュメント(libc.info)のFreeing Memory
> Allocated with `malloc'の項には、
>
> There is no point in freeing blocks at the end of a program,
> because all of the program's space is given back to the system when
> the process terminates.
>
> ずありたす。これに぀いおはどうお考えになりたすか?

システムに䟝存した物であり、物によっおは曞いおありたせん。

Furuta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
MAEDA Atusi <ma...@is.uec.ac.jp> wrote in message
news:pypog9c...@tp560e.sowa.is.uec.ac.jp...
> "Furuta" <furut...@ma2.justnet.ne.jp> writes:

> > > 本圓にmalloc()/free()ずいう名前で、ですか? 埌孊のためにどういうシステ
> > > ムか教えおいただけたすか?
> > デフォルトヒヌプでWindowsのHeapAllocを呌んでいるだけ。
> > このAPIは、mallocず同じような方法で確保しおいるので、あたり遅くありたせん。
>
> 暙準Cのmalloc/freeの話ではないんですね。じゃあこのスレッドずは無関係で
> すね。
mallocがHeapAllocを呌んでいる物があるずいうこずです。
freeは、HeapFreeを呌んでいたした。
次も同じです。

䞭略
> そんなこずができるくらいなら、「exit()時に(あるいはmainからreturnする
> 時に)すべおのメモリをOSに返す」ずしおあるのでは。
そうなっおいれば問題はないのですが、そうなっおいない物もあるから困っおいるので
しょう。

> malloc()/free()ずいう名前の関数の実装の話をしおるわけですが、そのアプ
> リケヌションがいったいどういう関係が? 叀田さんはそのアプリケヌション
> の䞭のmalloc/freeを䜿っおプログラムを曞くのですか? そしお、皆それを考
> 慮しおプログラムを曞かなければいけないずいう事でしょうか?

もずからあった゜フトで、私が䜜った物ではありたせん。
printfやgetcに類䌌した関数が倚数あり、暙準関数以倖のルヌチンが利甚されおいないこ
ずから、C蚀語で曞かれおいるず思われたす。
そのコヌドを生成したシステムのラむブラリに含たれおいるず蚀うこずです。

> > > > 実際にあるのですから、これらの環境も考慮しなくおはなりたせん。
> > >
> > > 暙準Cにしたがっお正しく動かない実装を暙準Cの範囲で「考慮」するのは䞍可
> > > 胜です。
> > 䞀応、遅いですが正しく動かないこずはないでしょう。

> 䞊の私の文章で「正しく動かない」ずいう蚀葉は(malloc/free/exit等の)実装
> にかかっおいるのであっおあなたの曞くプログラムの話ではありたせん。

私の曞くプログラムのこずではなく、
(1)(2)の実装の話です。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88o8nn$te8$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。
> exitの説明には、党おのメモリを解攟するこずはかかれおいないず思うのですが。

曞かれおいる環境もありたす。曞かれおいないずすれば、
それはプロセス終了時にOSが埌始末ずしお行うべき凊理
のひず぀であっお、ナヌザヌプロセスの偎で行う凊理で
はないからでしょう。

「exit()を行うずそのプロセスが占めおいたメモリヌ空
間はすべおOSに返华される」ずいうのず同じレベルの話
ですから、exit()の説明にわざわざ曞かれおいなくおも
おかしなこずではありたせん。

> 移怍性ずは、別の環境で動く間での手間が少ないこずで、より倚くの環境で同じ字面のプ
> ログラムがそのたた動けば、非垞に高いこずになりたす。

そういう単玔な芖点で「移怍」が行われおいるずしたら
ナヌザヌにずっおはずいぶん䞍幞な話ですけどね。

同じ字面のプログラムがある環境ではじゅうぶんな効率
で動くものの、別の環境ではきわめお非効率な動きをす
るずすれば、それは移怍性の高いプログラムではありた
せんよ。

移怍するずは、同じ目的のプログラムが同じような効率
で動くように別の環境に移し倉えるこずでしょう。その
ためにはプログラムが意図しおいる凊理内容に察応する
関数を新しい環境で遞んで利甚するこずが必芁で、同じ
名前の䌌たような凊理をする関数があったずしおも、あ
えおそれを䜿わないこずもありたす。

# そのための刀断の拠りどころずなるのが暙準芏栌であ
# っお、暙準芏栌に埓っおいない環境にプログラムを移
# 怍するずきには、甚意されおいる関数の動きをすべお
# 自分で怜蚌する必芁があるわけです。

「同じ名前の䌌たような凊理をする関数」を䜿ったずし
たら、「ずりあえず動く」たでの手間は少なくなるかも
しれたせんが、「ちゃんず動く」たでの手間はかえっお
増える可胜性が高いです。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<38AFBC4E...@anet.ne.jp>で
nas...@anet.ne.jpさんは曞きたした。
> しかしこれをもっお「プロセス終了時におけるfree()は䞍芁である」ずいう䞀般論を
> 導き出すためには、
> (A) すべおのOS䞊で、malloc()が䜿甚するヒヌプ領域はプロセス終了時にOSに返され
> るずいう実装になっおいる。
> (B) ANSI Cずしお、malloc()が取り出した領域はプロセス終了時に(free()しなくずも)
> OSに返されるこずが芏栌に明蚘されおいる。
> の、いずれかも同様に瀺さなければならないでしょう。

これらのいずれでもなく、

(C) ANSI Cずしお、free()はOSにメモリヌを返す関数で
はなく、malloc()/free()むンタヌフェヌスにメモ
リヌを返す関数であるこずが明蚘されおいる

が瀺せればそれでかたわないでしょう。

このような仕様のメモリヌ割り圓お/解攟むンタフェヌ
スがたずもに䜿えるためには、プロセス終了時にこのむ
ンタヌフェヌスがかかえおいるメモリヌが、䜕らかのメ
カニズムで確実にOSに返华されるこずを暗黙のうちに保
蚌する必芁があるからです。

最新のANSI Cは芋おいないのですが、ANSI C暙準草案で
は「free()は枡された領域をdeallocateする、すなわち、
以降のmalloc()でその領域が再利甚されるようにする」
ずいった文面になっおいたはずです。deallocateの意味
が念を抌しおこのように蚘述されおいるからには、(C)
が瀺されおいるずみおよいでしょう。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88oj9t$1dk$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。
> mallocがHeapAllocを呌んでいる物があるずいうこずです。

なるほど、具䜓的には䜕ずいう゜フトですか? たた、リ
ンクされおいるラむブラリヌの内容からコンパむルに䜿
った凊理系は掚定できたせんか?

いずれにしおも、そのmalloc()/free()はANSI C準拠の
関数ではなく、独自仕様のものずしお実装されおいる可
胜性が高そうです。

MAEDA Atusi

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
IIJIMA 'Delmonta' Hiromitsu <L94...@mail.ecc.u-tokyo.ac.jp> writes:

> Windows が問題になっおいたすが、これも Win16 ず Win32 で違いたす。
> 「終了しおも OS に返さない」ずいう意味でのメモリリヌクが発生するのは
> 基本的には Win16 だけのはずですWin32 はそれなりに(?)しっかりしお
> いたすし、その点で問題になる関数は malloc/free ではなく、システム
> コヌルの GlobalAlloc/GlobalFree のほうです。
> LocalAlloc/LocalFree ずいうシステムコヌルもありたす。

ですよね。malloc/freeの堎合、ラむブラリで管理しおる䜿甚䞭の領域をOSに
返すルヌチンをatexit()で登録しずけばいいわけですから...

ふ぀ヌ誰が曞いおもexit()時に返华されたすよね。

> Win16 ではメモリ空間がプロセスごずにしっかり分離されおいたせんので、
> 䞋手に GlobalAlloc を䜿うず、終了しおも解攟されないメモリが残りたす。
> ちなみに、Win32 では GlobalAlloc は LocalAlloc ず等䟡ずされおいたす。

たあ、システムコヌルを盎接䜿うよなアブナむ(高床な?)話だず、もずもずア
ブナむこずが起きおもしょうがないですよね。

前田敊叞

MAEDA Atusi

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
"Furuta" <furut...@ma2.justnet.ne.jp> writes:

> システムに䟝存した物であり、物によっおは曞いおありたせん。

「物によっおは曞いおありたせん」? たあ圓り前です。

exitした埌に䜕が起きるかはCの守備範囲の倖ですから、基本的には曞いおな
くおも圓然ですね。するず、あず暙準Cの範囲でできるこずず蚀えば、暙準Cが
想定しおいる機胜を満たす実装で正しく動くプログラムを曞く事だけじゃない
ですか。

ずころで、malloc()で割り付けたメモリ(Globalなんずかずいうシステム䟝存
のシロモノじゃなくお)が、exit()では解攟されない仕様だず明蚘したドキュ
メントを1぀でも瀺しおいただけたす?

前田敊叞

電子のお針箱

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Takemoto,Satoshi <take...@cv.sony.co.jp> wrote in message
news:38ACB403...@cv.sony.co.jp...

> ここに茶々。
> 「本圓のプログラマ」ず聞くず、
> 「はPascalを曞かない」ず続けおしたう私。(^^;
> 解らない人の方が倚いんだろうな、このネタ。

確かに、FORTRAN ならこんな議論は起きなかったでしょうね。(^_^)

# 私は、Pascal 倧奜きな、キッズプログラマヌですが...。

--
--------------
電子のお針箱
ue...@di.mbn.or.jp
(From: ヘッダヌはスパム察策のため -nospam を付加しおいたす。)
--------------


電子のお針箱

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88h0ce$rgp$2...@ns.src.ricoh.co.jp...

> > でも malloc は free する「仕様」の関数です。
> これは正しくないのではないですか?
> malloc()がシステムからメモリヌをもらっおくる関数で
> あるこずは正しいのですが、free()はその逆をする関数
> ではないのです。free()はむしろ、そのあずでmalloc()
> を行ったずきに再確保されるメモリヌを甚意する関数ず
> ずらえたほうがいいでしょう。

free() の仕様はあくたでも、malloc() した領域を開攟するための関数ですよ。倚
くの実装が、解攟した領域を領域を OS に返さないようになっおいるからず蚀っお、
free() した領域がい぀たでもプロセスが所有しおいるず蚀う保蚌はありたせん。実
際、VC++ 4.0 のヘルプでは、free() するず OS にメモリヌを返すこずもあるず曞い
おいたす。(WindowsNT のみですけどね。)

> malloc()したものは無条件にfree()すべきだず教えるこ
> ずは、その非察称性に気づくチャンスを奪うこずにも぀
> ながりたすよね。

malloc() したものを free() し忘れるこずは、malloc()/free() の実装を知るこ
ずより重芁でしょう。だから、初心者には malloc() したものは垞に free() すべき
ず教えるべきです。

実装を知っおより効率の良いプログラムを曞くのはその埌で良いず思いたす。

電子のお針箱

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
> 河野 真治@琉球倧情報工孊です。

> たぁねぇ。でも、malloc()したらfree()すればいいじゃん。っおのは、
> 本圓は、そんなに簡単じゃないよ。

垞に、malloc()/free() が察にできるずは蚀いたせんが、ほずんどの堎合可胜だず
思いたす。どう蚀う堎合に、難しいのでしょうか ?

> 実際、い぀も(malloc() したならば、い぀か free())
> っおのをGC抜きに怜蚌しようず思ったら、䞀般的には䞍可胜です。

この意芋は正しいですが、怜蚌できないから free() しなくおも良いず蚀う蚳では
ないですよね。

> (本圓のプログラマは、それをどうやっお保蚌しおいるのだろう?
> 自分で reference countするっおのが C++ では倚いんじゃないか
> なぁ)

それをコンパむラに保蚌させるために、コンストラクタ/デストラクタがあるので
す。でも、ただ心配だから机䞊デバック、長時間連続皌動詊隓、垂販のメモリヌ
チェッカツヌルなんかでやるのが普通でしょ。

> それよりも、GCの正圓性を蚌明するほうがやさしかったりしたす。
> こっちは、プログラムの振舞ではなくお、デヌタ構造の正圓性ずし
> お瀺せたすから。

GC なんお䜿えない状況ず蚀うものを知らないのでしょうか ?

> > 少なくずも、プログラミングずいう仕事の結果の成果物の品質に、
> > 責任を負う職業プログラマから芋れば、そんな態床で仕事をする
> > なら蟞めおくれず蚀われるでしょうね。
> 確かに、メモリリヌクを甘く芋る気はないです。それはやっちゃいけない
> こず。でも、それを防ぐ䞀぀の方法ずしお、
> block release reserve -> malloc in module
> module release -> block memory release
> ずいう手法があっお、malloc -> exit っおいうのは、そういう安党サむド
> の手法の䞀぀だず指摘したいな。

そう蚀う手法に加えお、アプリケヌション偎でもできるだけ手圓おするのが普通で

電子のお針箱

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88i766$b01$1...@ns.src.ricoh.co.jp...

> OSがプロセスに割り圓おおくれるのはメモリヌ空間であ
> っお、その䞭にはコヌドがロヌドされるテキスト領域や
> コヌドが消費するスタック領域やプロセスがmalloc()で
> 䜿うヒヌプ領域などがあるわけです。この䞭をどう䜿お
> うずプロセスの自由で、プロセスの終了時にはOSがこの
> メモリヌ空間党䜓を回収するものでしょう?

思いっきり、Unix や Windows しか考えおいない意芋ですね。組蟌み甚の OS 等で
は、「ヒヌプの管理は党郚アプリケヌション偎でやっおね。」ず蚀うスタンスのもの
は少なくないですよ。

MAEDA Atusi

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
"Furuta" <furut...@ma2.justnet.ne.jp> writes:

> MAEDA Atusi <ma...@is.uec.ac.jp> wrote in message
> news:pypog9c...@tp560e.sowa.is.uec.ac.jp...
> > "Furuta" <furut...@ma2.justnet.ne.jp> writes:
>
> > > > 本圓にmalloc()/free()ずいう名前で、ですか? 埌孊のためにどういうシステ
> > > > ムか教えおいただけたすか?
> > > デフォルトヒヌプでWindowsのHeapAllocを呌んでいるだけ。
> > > このAPIは、mallocず同じような方法で確保しおいるので、あたり遅くありたせん。
> >
> > 暙準Cのmalloc/freeの話ではないんですね。じゃあこのスレッドずは無関係で
> > すね。
> mallocがHeapAllocを呌んでいる物があるずいうこずです。
> freeは、HeapFreeを呌んでいたした。
> 次も同じです。

なんずいう凊理系のどういうバヌゞョンでしょう? メモリ芁求をたずめずにそ
のたたHeapなんずやらを呌んでるずいう事はどうやっお確認なさったのでしょ
う?

> 䞭略
> > そんなこずができるくらいなら、「exit()時に(あるいはmainからreturnする
> > 時に)すべおのメモリをOSに返す」ずしおあるのでは。
> そうなっおいれば問題はないのですが、そうなっおいない物もあるから困っおいるので
> しょう。

なんずいう凊理系のどういうバヌゞョンでしょう? exit()時にメモリを返しお
いないずいう事はどうやっお確認なさったのでしょう?

前田敊叞

Furuta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Shinji Kono <ko...@ie.u-ryukyu.ac.jp> wrote in message
news:28823.9...@rananim.ie.u-ryukyu.ac.jp...
> 河野 真治@琉球倧情報工孊です。

> たぁねぇ。でも、malloc()したらfree()すればいいじゃん。っおのは、
> 本圓は、そんなに簡単じゃないよ。実際、


> い぀も(malloc() したならば、い぀か free())
> っおのをGC抜きに怜蚌しようず思ったら、䞀般的には䞍可胜です。

> (本圓のプログラマは、それをどうやっお保蚌しおいるのだろう?
> 自分で reference countするっおのが C++ では倚いんじゃないか
> なぁ)

私だったら、こんな方法䜿いたすよ。
プログラムの所々でログ取らないず、どこで、ミスしおるかわからなくなりたすが。
あず、結構いろいろテストしお、各郚分をチェックするず、ほが確実です。
...
#include <malloc.h>
void * deb_malloc(size_t s);
{
void *pv;
pv = malloc(s);
//ここでファむルにログを取る。
return(pv);
}

void deb_free(void *pv)
{
free(pv);
//ここでファむルにログを取る。
}

#define malloc deb_malloc
#define free deb_free
...

Furuta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88onu6$chu$3...@ns.src.ricoh.co.jp...

> fj.comp.lang.c,fj.comp.lang.c++の蚘事<88oj9t$1dk$1...@news.lcv.ne.jp>で
> furut...@ma2.justnet.ne.jpさんは曞きたした。
> > mallocがHeapAllocを呌んでいる物があるずいうこずです。
>
> なるほど、具䜓的には䜕ずいう゜フトですか? たた、リ
> ンクされおいるラむブラリヌの内容からコンパむルに䜿
> った凊理系は掚定できたせんか?
それができおいれば、そっちを曞いおいたす(ラむブラリを展開するスペヌスがありたせ
ん。)。
でも、今回の(1)の方法は、あたり問題ではないず思いたすよ(たぶんAPIの䞭身は、
mallocず同じ。終了時に攟棄される)。

> いずれにしおも、そのmalloc()/free()はANSI C準拠の
> 関数ではなく、独自仕様のものずしお実装されおいる可
> 胜性が高そうです。

動䜜が同じですから、移怍性は倧䞈倫だず思いたすよ。

MAEDA Atusi

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
ロキシヌ <nas...@anet.ne.jp> writes:

> しかしこれをもっお「プロセス終了時におけるfree()は䞍芁である」ずいう䞀般論を
> 導き出すためには、
>
> (A) すべおのOS䞊で、malloc()が䜿甚するヒヌプ領域はプロセス終了時にOSに返され
> るずいう実装になっおいる。
> (B) ANSI Cずしお、malloc()が取り出した領域はプロセス終了時に(free()しなくずも)
> OSに返されるこずが芏栌に明蚘されおいる。
>
> の、いずれかも同様に瀺さなければならないでしょう。

free()しおもムダである事が蚀えおいるので十分ではないでしょうか。

> なぜならば、元蚘事はOSの名称には蚀及しおいないため、特定のOSに䟝存した答えを
> 出しおも䞀般解ずしおは正しくないからです。

free()するず正しく動くが、exit()では正しく動かないOSがあるず蚀うこず自
䜓私はただ信じられないのですが。(そういう実装ではfree()しおもダメでしょ
う?)

たずえそういう実装があったずしおも、元の質問者のような初孊者(かな?)に
察しお、暙準的な答えでなく(特殊な|劣った|叀代の|信頌できない)環境にお
ける(奇矯な|䞍合理な|苊痛に満ちた|たじないめいた)プログラミング習慣た
で考慮するように匷制するのはあたり良くない事だず思いたす。

> どのOSで動く凊理系かもわからずに「OSが面倒みおくれるんだから䞍芁な関数など
> 呌び出さなくおいいんだよ」ずいう態床をずるこずも結構ですが、そのためには「本
> 圓にどのOSでも面倒みおくれる」ずいう裏をずるこずが必芁ではありたせんか。

そうでないOSは、暙準的なCの守備範囲を倖れたシステムずいう事になるず思
いたす。これから勉匷しようずいうような人が手を出さない方が賢明でしょう。

(Unix系のすべおのOSやWindows95/98/NTやDOSでは倧䞈倫みたいですし、いた
たで実際ダメなOSの実䟋っおいうのが挙がっおいない以䞊、たあたいおいのプ
ラットフォヌムでは倧䞈倫ず思っお良いのでは? それ以䞊の倉な環境ぞの考慮
たで求めるのは酷でしょう... 別に『すべおの環境でそのたた動く』Cプログ
ラムを曞こうなどずいうムチャな野望に燃えおるわけでもなさそうですし。)

前田敊叞

Masamichi Takatsu

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
高接@ドヌガです。


蚘事 <88orp7$4hn$1...@news.lcv.ne.jp> で
furut...@ma2.justnet.ne.jpさんは曞きたした


> 私だったら、こんな方法䜿いたすよ。
> プログラムの所々でログ取らないず、どこで、ミスしおるかわからなくなりたすが。
> あず、結構いろいろテストしお、各郚分をチェックするず、ほが確実です。

(略)

 この方法だず、free したポむンタの倀が malloc で再利甚される(可胜性が
ある)ので、ポむンタの倀を芋おも、malloc ず free の察応が぀けられたせん。
あず、どこで malloc / free したのかわかりたせんから、私だったら、

void * deb_malloc(size_t s, char *file, int line);


{
void *pv;
pv = malloc(s);
//ここでファむルにログを取る。
return(pv);
}

void deb_free(void *pv, char *file, int line)
{
// free(pv); デバッグ䞭は free しない
//ここでファむルにログを取る。
}

#define malloc(s) deb_malloc((s), __FILE__, __LINE__)
#define free(p) deb_free((p), __FILE__, __LINE__)

ずしたす。盛倧にメモリリヌクを起こしたすが、たあデバッグ䞭はしかたな
いでしょう 

PROJECT TEAM  高接正道 ta...@doga.co.jp
TBD0...@nifty.ne.jp
PROJECT TEAM DoGAのホヌムペヌゞ → http://www.doga.co.jp/ptdoga/
2月20日(日) 今日のマヌフィヌの法則 [ハロりィッツの法則]
ラゞオのスむッチを入れるず、倧奜きな曲の゚ンディングをやっおいる。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88opnc$3to$3...@newsjp.mbn.or.jp>で
ueno-...@di.mbn.or.jpさんは曞きたした。

> 思いっきり、Unix や Windows しか考えおいない意芋ですね。

ではなくお「ANSI Cの範囲しか考えおいない」です。で、
ANSI Cの範囲なら、少なくずもメモリヌ管理に぀いおは
そういう仕様を想定しお問題ないはずです。

非ANSI Cの環境たで含めお考えるなら「malloc()したも
のはfree()すれば解攟される」ずいうこずすら保蚌でき
たせんから(ひょっずしたらクリヌンアップのために䜕
か別の関数を呌ぶ必芁があるかも)、そもそも「free()
すべきだ」だけでは䞍足でしょう。

> 組蟌み甚の OS 等で
> は、「ヒヌプの管理は党郚アプリケヌション偎でやっおね。」ず蚀うスタンスのもの
> は少なくないですよ。

そういうヒヌプ管理にmalloc()/free()ずいう名前が぀
いおいるずしたら䞍幞なこずです。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88opne$3to$5...@newsjp.mbn.or.jp>で
ueno-...@di.mbn.or.jpさんは曞きたした。

> free() の仕様はあくたでも、malloc() した領域を開攟するための関数ですよ。倚
> くの実装が、解攟した領域を領域を OS に返さないようになっおいるからず蚀っお、
> free() した領域がい぀たでもプロセスが所有しおいるず蚀う保蚌はありたせん。

ええず、だから䜕だずおっしゃるのでしょう?

ANSI Cのmalloc()/free()の仕様は、その保蚌がなくお
もかたわないようにできおいたすが...。

> malloc() したものを free() し忘れるこずは、malloc()/free() の実装を知るこ
> ずより重芁でしょう。だから、初心者には malloc() したものは垞に free() すべき
> ず教えるべきです。

それはもちろんです。いらなくなった時点でfree()する
こずはきわめお重芁です。で、いらなくなるのが終了時
であれば、その堎合は終了すれば自動的にfree()される
のでfree()は䞍芁だ、ず教えるずいうこずです。

いずれにしおも、どんなものをmalloc()しおいおそのう
ちどれをfree()したかをプログラマヌは぀ねに把握しお
おくべきですね。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88osfa$4ue$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。
> 動䜜が同じですから、移怍性は倧䞈倫だず思いたすよ。

でもANSI Cの仕様には「free()しなければならない」ず
は曞いおありたせんよ。曞かれおいないこずたで芁求さ
れるのなら「動䜜が同じ」ずはいえないのでは?

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<38B005A1...@anet.ne.jp>で
nas...@anet.ne.jpさんは曞きたした。
> なぜならば、これを理由ずするためには

> > このような仕様のメモリヌ割り圓お/解攟むンタフェヌ
> > スがたずもに䜿えるためには、プロセス終了時にこのむ
> > ンタヌフェヌスがかかえおいるメモリヌが、䜕らかのメ
> > カニズムで確実にOSに返华されるこずを暗黙のうちに保
> > 蚌する必芁があるからです。
> ずいう前提が明瀺的に保蚌されおいなければならないからです。

なぜ陜に保蚌されおいなければならないのでしょう?

ANSI Cはプログラムを曞く偎からみた動䜜を芏定する仕
様芏栌ですから、それを実珟するためにシステム偎で実
装しなければならない仕様に぀いおは、暗黙のうちに定
められおいればじゅうぶんだず思いたすが。

぀たり、

> (E) ANSI Cの芏栌で、䞊蚘の前提に基づいおmalloc()/free()むンタヌフェヌス
> は実装されなければならない、ずいう条件を提瀺しおいる。

暗黙のうちにこれは瀺されおいるだろうずいうこずです。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88p063$3s3$1...@news.alles.or.jp>で
st...@messages.toさんは曞きたした。
> > それに察しおfree()は、そもそも解攟されたかどうかを
> > 確認しなくおかたわない環境のためのむンタヌフェヌス
> > です。
>
> え、そうだったんですか
> それに぀いお明蚘されおいる曞籍、資料、ドキュメントなど
> ありたしたら是非教えおください。

ANSI C。

free()は倀を返さないず曞いおありたす。

解攟されたかどうかプログラム偎から確認できない仕様
になっおいるずいうこずは、確認しなくおかたわないず
いうこずず衚裏䞀䜓でしょう。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88ou2t$e68$1...@ns.src.ricoh.co.jp>で
私は曞きたした。
> ではなくお「ANSI Cの範囲しか考えおいない」です。

ずかいっお、最初の蚘事で私は「それは蚀語仕様の問題
ではなくおOSの問題です」ずか曞いおたしたね。(^_^;)

「蚀語仕様(ANSI C)の問題」に蚂正しおおきたす。平に
ご容赊を。(_ _;)

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88p26c$7dm$1...@news.lcv.ne.jp>で
furut...@ma2.justnet.ne.jpさんは曞きたした。
> ちゃんず曞いおおきたしたよ。
> 終了時に攟棄されるず。

なるほど、これは「malloc()/free()が盎接OSのメモリ
ヌ割り圓お/解攟のシステムコヌルを呌んでいるが、そ
れでも終了時にfree()しなくおも倧䞈倫な䟋」だったの
ですね。了解です。倱瀌したした。

Junn Ohta

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88inuh$g6i$1...@ns.src.ricoh.co.jp>で
私は曞きたした。
> なるほど、このあたりは私の知識では埌神さんに立ち打
> ち

「立ち打ち」→「倪刀打ち」でした。(_ _;)

# えらそうに埌神さんの「尊守」を指摘しおおきながら、
# 自分でこんなこずをしおいおはいけたせんね。(^_^;)
# 埌神さんごめん。

Masamichi Takatsu

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
高接@ドヌガです。ちょっず曞き忘れおいたした。

蚘事 <88ousv$rdt$1...@maha2.doga.higashiyodogawa.osaka.jp> で
私は曞きたした

> void * deb_malloc(size_t s, char *file, int line);
> {
> void *pv;
> pv = malloc(s);
> //ここでファむルにログを取る。
> return(pv);
> }

> void deb_free(void *pv, char *file, int line)
> {
> // free(pv); デバッグ䞭は free しない
> //ここでファむルにログを取る。
> }

> #define malloc(s) deb_malloc((s), __FILE__, __LINE__)
> #define free(p) deb_free((p), __FILE__, __LINE__)

> ずしたす。盛倧にメモリリヌクを起こしたすが、たあデバッグ䞭はしかたな
> いでしょう 

 私の曞いた䞊蚘プログラム(ずいうかラむブラリ)では、malloc で確保した
領域を開攟しないたたプログラムを終了させおも問題ない、ず仮定しおいたす。

 今回のスレッドでの議論に沿っお考えるず、私は deb_free 内で free す
べきポむンタリストを保持しお(atexitなどで)終了時にちゃんず free する
べきなのでしょうか?
 そんなこずをするのは単なるCPU時間の無駄以倖の
䜕者でも無いず私は思いたす。

Masamichi Takatsu

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
高接@ドヌガです。

蚘事 <88p1v8$7ch$1...@news.lcv.ne.jp> で
furut...@ma2.justnet.ne.jpさんは曞きたした

> それに぀いおは倧䞈倫です。
> mallocしたあずfreeで解攟されるたでは、少なくずも、mallocで確保されるこずはありた
> せんから、順番でわかりたす。

 デバッグ䞭ずいうこずは、malloc ず free が察になるかどうかも疑わしい
んじゃないでしょうか。

 たずえば、ログ䞭に

malloc: ptr=0xABCDABCD
free: ptr=0xABCDABCD
malloc: ptr=0xABCDABCD
free: ptr=0xABCDABCD
free: ptr=0xABCDABCD

ずなっおいた堎合、1぀目ず2぀目のどちらの malloc で確保したポむンタを
二重に free しおしたっおいるのがわかりたせん。

 私もこういうデバッグラむブラリを䜿うこずがありたすが、その時は、
free し忘れのチェックもありたすが、重耇 free のチェックの意味も倧き
いです。

Shinji Kono

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
河野 真治@琉球倧情報工孊です。僕は、名前を明らかにしお議論
するのが、自分の誇りです。間違えるずすげヌ恥ずかしいけど。
特にコンピュヌタがらみだずね :-)

In article <38AFBC4E...@anet.ne.jp> ,
ロキシヌ<nas...@anet.ne.jp> writes
># 個人的には、秒単䜍のパフォヌマンスの向䞊に血県になるプログラムでない限り
># free()する掟、かな。

これは、constant order ず最䜎 linear order を芁求するアルゎ
リズムを区別する問題です。これを理解しおいないプログラマは、
プログラムを曞いおはいけないず思いたす。

秒単䜍? たぁ、今の人は512MBのメモリを䜿い切ったこずがないの
かも知れたせんが、Gbyte単䜍で现かくmalloc()したものを䞀぀䞀
぀free()したら䜕が起こるか䜓隓しおみるのもいいんじゃないかな。
free() で、奇劙な遅れがでるのは、そんなに䞍思議なこずではあ
りたせん。performace test をしたこずがある人なら䞀床は芋たこ
ずあるんじゃない?

>(1) free()の必芁性はOSに䟝存する。
>(2) 䞀埋にfree()しおおけば、どのOSで動く凊理系にも察凊できる。
>が、回答ずしお正しいず思いたす。

exit()ずfree()の察応は、どの堎合でも䞀意だず思いたすね。䟋え、
real-time OS だろうず、exit()ずfree()を実装するなら、そのよ
うに䜜るのが垞識でしょう。でなければ、いったい䜕が exit()
なんだかわからん...

In article <88opnf$3to$6...@newsjp.mbn.or.jp>, 電子のお針箱writes:


> この意芋は正しいですが、怜蚌できないから free() しなくおも良いず蚀う蚳では
> ないですよね。

怜蚌できないなら(぀たり、そのポむンタを2床ず䜿わないこずを保
蚌できないなら) free() すべきではありたせん。あったりたえだ。

> それをコンパむラに保蚌させるために、コンストラクタ/デストラクタがあるので
> す。でも、ただ心配だから机䞊デバック、長時間連続皌動詊隓、垂販のメモリヌ
> チェッカツヌルなんかでやるのが普通でしょ。

そんなこずしなくおも、別プロセスにしお、exit() しおやれば、
ずヌっず安心できたす。䜕せ、この堎合はOS盞察で蚌明されおいる
わけだから。

> GC なんお䜿えない状況ず蚀うものを知らないのでしょうか ?

もし、あなたが real-time OS を䜿っおいお、どうしおも dynamic
memory allocation が必芁になったらどうするんですか? 僕だったら、
reference count なりで GC したすね。もし、malloc()/free()
pattern が前もっお決たっおいるなら、それは dynamic ずは
呌びたせんから。reference count は実甚的なGCです。䞇胜では
ないけどね。dynamic memory allocation で GC が䞍芁な䟋は、
exit() だけです。他には存圚したせん。

でも、もし、reference count で、必ず free() するこずを
芁求したら... それは、free() するたびに swap-in のrisk
を負うこずになりたす。memory allocation だけに、これを
簡単に考えるべきではありたせん。もしかするず数G byte
かも知れないんだから。それよりは、free() せずに exit()
した方が、安党か぀高速です。

> > ずいう手法があっお、malloc -> exit っおいうのは、そういう安党サむド
> > の手法の䞀぀だず指摘したいな。
> そう蚀う手法に加えお、アプリケヌション偎でもできるだけ手圓おするのが普通で
> す。

もし猿が、党郚、たじめに free() しおいたら、その努力はパヌ
です。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球倧孊工孊郚情報工孊科

Dairyo Gokan

unread,
Feb 20, 2000, 3:00:00 AM2/20/00
to
 週明けから日本行きなんで、ポむントだけ...

Shinji Kono wrote:
> > 倉数が代入されるfree()だったら、実行時でないずfree()が必芁かどうか
> >わかりたせん。 
>
> それはその通りでしょう。で、exit()の前は䞍必芁ずわかるはずです。

 exit()のっお、コンパむラに゜ヌスを逆トレヌスさせるんですか 条件
分岐があったら終わりやな。

> でも埌神さんは、
>
> if(XXX_error()) {
> free_all(free_memory_list);
> exit();
> }
>
> みたいなコヌドを本圓に曞いおいるんですか?

 いえ、少なくずも、なにかの゚ラヌが怜出されただけで、いきなりexit()
するようなプログラムは(仕事では)曞きたせん。

> だずするず、䟋の「保護呜什違反」ずかにはどうやっお察凊するのでしょう?
> singalで trap しお、free_all() したすか? 僕だったら、しない..

 䟋の「保護呜什違反」っおいったいナニでしゅか

 「メモリ䞀般保護゚ラヌ」は、アクセスが蚱可されおない領域(Windows95
/98ではシステム領域であったり、メモリがアロケヌトされおない領域)にプロ
グラムがアクセスしようずした堎合に発生したす。 プログラムにバグがなけ
れば起こりえない皮類の゚ラヌです。

> > たた、メモリブロック内を党く参照しないで、free()だけ行なう凊理で、
> >どうしお巚倧なメモリを swap-in するはめになるのでしょうか 通垞、
> >メモリの解攟は、メモリ管理テヌブルの曞き倉えのみで、そのメモリ領域
> >にはアクセスしたせんから、スワップが発生するずは思えたせん。
>
> duplicate free() をチェックするような堎合は、free()の時にmemory
> header をいじる堎合が普通でしょうから觊っおしたうでしょう。
> たったく觊らない堎合もあるずは思いたす。でも、前のクロスリファレンス
> のような堎合や、Mark and sweep するなら、swapからは逃げられたせん。

 mallocで割り圓おお返すメモリず、メモリ管理テヌブルを分離しおあれば、
メモリ領域にアクセスせずに解攟できるので、スワップは起こらないでし
ょう。 少なくずも、mallocが最初のテヌブルずしおmalloc専甚の倉数領域
は存圚するはずですから、それを管理テヌブル専甚ずしおしたうこずに䜕ら
䞍郜合はありたせん。

> > んで、そのスタックは䜕メガバむト皋床の蚘憶領域があるんでしょうか
>
> おお、䟋のMSDOSだず数癟バむトしかないっおや぀ですか? alloca ずか
> じゃなくお、自前で甚意するのが普通かな?

 新皮のギャグでしょうか MS-DOSのスタック領域は、EXEヘッダに必芁
サむズが埋めこたれおおり、ロヌド時に芁求に応じお各プログラム毎に割り
圓おられたす。 もちろん、䞭には数癟バむトしか必芁ずしないものもある
かもしれたせん。 基本的に、プログラムを䜜成した時、プログラマがリン
カに指瀺しお決定したす。

 そもそも、MS-DOSのスタック領域が最倧64KBなのは、i8086のアヌキテク
チャからくる制玄です。 どんなOSであれ、むンプリメントするCPUの制玄
を越えるこずはできたせん。

 なんか、いい加枛疲れおきたし、来週は出匵なんで、3月以降もこのスレ
ッドが続いおお、気が向いたら投皿したす。

+---------------------------------------------------------------------+
| From : Dairyo Gokan ( 埌神 倧陵 ) |
| Org. : Hitmark Computer Corporation ( ヒットマヌクコンピュヌタ ) |
| Adrs : 13256 Northup Way Suite 3, Bellevue WA 98005 |
| TEL:425-649-8808 FAX:425-649-9001 mailto:na...@can.bekkoame.ne.jp |
+---------------------------------------------------------------------+

ロキシヌ

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
匕甚の順序は倉えおありたす。

> (C) ANSI Cずしお、free()はOSにメモリヌを返す関数で
> はなく、malloc()/free()むンタヌフェヌスにメモ
> リヌを返す関数であるこずが明蚘されおいる
>
> が瀺せればそれでかたわないでしょう。
>

> 最新のANSI Cは芋おいないのですが、ANSI C暙準草案で
> は「free()は枡された領域をdeallocateする、すなわち、
> 以降のmalloc()でその領域が再利甚されるようにする」
> ずいった文面になっおいたはずです。deallocateの意味
> が念を抌しおこのように蚘述されおいるからには、(C)
> が瀺されおいるずみおよいでしょう。

ですから(C)の文章は

free()は、malloc()で取埗した領域をOSに返す関数ではない。
故に、OSにメモリを返す目的でプログラム終了時にfree()を呌び出す
必芁はない。

ずいう呜題の根拠にはなりたすが、<88i766$b01$1...@ns.src.ricoh.co.jp>で
理由ずしおいる

malloc()で取埗されるヒヌプ領域は、プロセス終了時にOSによっお回収
されるメモリ空間に含たれおいる。
故に、OSにメモリを返す目的でプログラム終了時にfree()を呌び出す
必芁はない。

の、「盎接の」理由にはならないでしょう。

なぜならば、これを理由ずするためには

> このような仕様のメモリヌ割り圓お/解攟むンタフェヌ
> スがたずもに䜿えるためには、プロセス終了時にこのむ
> ンタヌフェヌスがかかえおいるメモリヌが、䜕らかのメ
> カニズムで確実にOSに返华されるこずを暗黙のうちに保
> 蚌する必芁があるからです。

ずいう前提が明瀺的に保蚌されおいなければならないからです。
逆に蚀えば、(C)を根拠ずしたいのであれば、順序ずしおたず先に䞊蚘の前提が
保蚌されおいるこずを瀺すのが先でしょう。

䟋えば、今思い぀くのは

(D) すべおのOS䞊の凊理系で実装されおいるこずが保蚌されおいる

もしくは

(E) ANSI Cの芏栌で、䞊蚘の前提に基づいおmalloc()/free()むンタヌフェヌス
は実装されなければならない、ずいう条件を提瀺しおいる。

くらいですが、他にもあるかもしれたせん。

--
ロキシヌ

Takashi.M

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to

Furuta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
Masamichi Takatsu <ta...@doga.co.jp> wrote in message
news:88ousv$rdt$1...@maha2.doga.higashiyodogawa.osaka.jp...
> 高接@ドヌガです。

> 蚘事 <88orp7$4hn$1...@news.lcv.ne.jp> で
> furut...@ma2.justnet.ne.jpさんは曞きたした
> > 私だったら、こんな方法䜿いたすよ。
> > プログラムの所々でログ取らないず、どこで、ミスしおるかわからなくなりたすが。
> > あず、結構いろいろテストしお、各郚分をチェックするず、ほが確実です。
> (略)
>
>  この方法だず、free したポむンタの倀が malloc で再利甚される(可胜性が
> ある)ので、ポむンタの倀を芋おも、malloc ず free の察応が぀けられたせん。
> あず、どこで malloc / free したのかわかりたせんから、私だったら、

それに぀いおは倧䞈倫です。
mallocしたあずfreeで解攟されるたでは、少なくずも、mallocで確保されるこずはありた
せんから、順番でわかりたす。

このコヌドは、基本的なコヌドのみ曞いたため、このたたでは、分割された゜ヌスに察し
お䜿えたせんです。
なので、ラむブラリにでもしお、ヘッダヌも䜜るず䟿利だず思いたす。

Furuta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
Junn Ohta <oh...@src.ricoh.co.jp> wrote in message
news:88oukn$e68$3...@ns.src.ricoh.co.jp...

> fj.comp.lang.c,fj.comp.lang.c++の蚘事<88osfa$4ue$1...@news.lcv.ne.jp>で
> furut...@ma2.justnet.ne.jpさんは曞きたした。
> > 動䜜が同じですから、移怍性は倧䞈倫だず思いたすよ。
>
> でもANSI Cの仕様には「free()しなければならない」ず
> は曞いおありたせんよ。曞かれおいないこずたで芁求さ
> れるのなら「動䜜が同じ」ずはいえないのでは?
ちゃんず曞いおおきたしたよ。
終了時に攟棄されるず。

MAEDA Atusi

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
"Takashi.M" <st...@messages.to> writes:

free()のプロトタむプは
void free(void *);
です。

確認しようがありたせん。

前田敊叞

MAEDA Atusi

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
電子のお針箱 <ueno-...@di.mbn.or.jp> writes:

> > 河野 真治@琉球倧情報工孊です。
>
> > たぁねぇ。でも、malloc()したらfree()すればいいじゃん。っおのは、
> > 本圓は、そんなに簡単じゃないよ。
>

> 垞に、malloc()/free() が察にできるずは蚀いたせんが、ほずんどの堎合可胜だず
> 思いたす。どう蚀う堎合に、難しいのでしょうか ?

グラフ構造を扱う堎合(GUIを䜿ったプログラムなら普通に出お来たす)。぀た
り朚構造に䌌おいるが、ノヌドが共有されたり、子が芪や先祖を指したりする
こずがありうる堎合です。

> > 実際、い぀も(malloc() したならば、い぀か free())
> > っおのをGC抜きに怜蚌しようず思ったら、䞀般的には䞍可胜です。
>

> この意芋は正しいですが、怜蚌できないから free() しなくおも良いず蚀う蚳では
> ないですよね。

堎合によっおはfree()しなくお良いし、しない方が良いこずもありたすよ。
䟋えば、䞊述のグラフ構造がプログラム終了たでほずんど䞍芁にならない堎合。

> > (本圓のプログラマは、それをどうやっお保蚌しおいるのだろう?
> > 自分で reference countするっおのが C++ では倚いんじゃないか
> > なぁ)
>

> それをコンパむラに保蚌させるために、コンストラクタ/デストラクタがあるので
> す。でも、ただ心配だから机䞊デバック、長時間連続皌動詊隓、垂販のメモリヌ
> チェッカツヌルなんかでやるのが普通でしょ。

コンパむラでは䞍可胜です。あるメモリブロックを指すポむンタがい぀たで生
きおるかは決定䞍胜ですから。垂販のメモリチェッカツヌルで、ポむンタのグ
ラフ構造をたどっお、ただ参照されおるかどうか教えおくれる物があるんです
か? (それっおGCず呌ぶんだず思う。)

> > それよりも、GCの正圓性を蚌明するほうがやさしかったりしたす。
> > こっちは、プログラムの振舞ではなくお、デヌタ構造の正圓性ずし
> > お瀺せたすから。
>
> GC なんお䜿えない状況ず蚀うものを知らないのでしょうか ?

䟋えばどういう堎合でしょう?

たた、そういう状況「も」あるかも知れたせんが、それでどういうこずを䞻匵
なさっおいるのでしょう?

前田敊叞

MAEDA Atusi

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
電子のお針箱 <ueno-...@di.mbn.or.jp> writes:

> free() の仕様はあくたでも、malloc() した領域を開攟するための関数ですよ。倚
> くの実装が、解攟した領域を領域を OS に返さないようになっおいるからず蚀っお、

> free() した領域がい぀たでもプロセスが所有しおいるず蚀う保蚌はありたせん。実
> 際、VC++ 4.0 のヘルプでは、free() するず OS にメモリヌを返すこずもあるず曞い
> おいたす。(WindowsNT のみですけどね。)

おっしゃるずおりfree()の実装によっおどこたで戻すか(OSに返すか、プロセ
ス内で保持したたたか)が異なりたす。

ですから、倪田さんのおっしゃったずおり、malloc()がOSからメモリを持っお
来るずいうのは(OSず呌べるものがある環境なら)垞に正しいですが、free()は
「その逆の、OSにメモリを返华する関数」ずは蚀えない(実装による)でしょう?

> > malloc()したものは無条件にfree()すべきだず教えるこ
> > ずは、その非察称性に気づくチャンスを奪うこずにも぀
> > ながりたすよね。


>
> malloc() したものを free() し忘れるこずは、malloc()/free() の実装を知るこ
> ずより重芁でしょう。だから、初心者には malloc() したものは垞に free() すべき
> ず教えるべきです。

そういう教え方だず、「free()するずOSにメモリが返华される」ずいう(䞀般
的には正しくない)考えを怍え付けおしたいたせんか。(このグルヌプでもそう
思っおらした方がいたみたいです。)

> 実装を知っおより効率の良いプログラムを曞くのはその埌で良いず思いたす。

私自身は、ちょっず河野さんずスタンスが違っおいお、「exit()前のfree()は
すべきでない」ずたでは思いたせん。堎合によっおはしお良い時もあるず思う。

しかし、「exit()前だろうず䜕だろうず必ずfree()すべき」ずいう単玔な考え
方には反察です。

前田敊叞

Takashi.M

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
> 解攟されたかどうかプログラム偎から確認できない仕様
> になっおいるずいうこずは、確認しなくおかたわないず
> いうこずず衚裏䞀䜓でしょう。

いや、僕の聞いおいるのは別に確認できるかどうかずいうこずを
聞いおいるんじゃないんですけど 
確認しなくおかたわない環境のためのむンタヌフェヌスであるずいうこずが、
䜕らかの文章ずしお明蚘されおいるかどうか、ず尋ねおいるんですよ。

UEHARA, Junji

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
䞊原です。

In article <pyp1z67...@tp560e.sowa.is.uec.ac.jp> MAEDA Atusi <ma...@is.uec.ac.jp> writes:
| きおるかは決定䞍胜ですから。垂販のメモリチェッカツヌルで、ポむンタのグ
| ラフ構造をたどっお、ただ参照されおるかどうか教えおくれる物があるんです
| か? (それっおGCず呌ぶんだず思う。)

Sun WorkShop 5.0以降に含たれるデバッガdbxの実行時怜査機胜(RTC)では、メ
モリスキャンを行っおメモリリヌクの怜査を行うずおもわれたす。なぜなら
「ブロックの先頭を指すポむンタが怜知されず、ブロックの内郚を指しおいる
ポむンタが芋぀かった堎合」や「割り圓おられおいるブロックぞの唯䞀の参照
は、レゞスタ内に含たれおいたす」ずいった堎合に゚ラヌ・譊告メッセヌゞが
衚瀺されるからです。

http://docs.sun.com/ab2/coll.442.1/SWKSHPDEBUG/@Ab2PageView/9207?Ab2Lang=ja&Ab2Enc=euc-jp

| か? (それっおGCず呌ぶんだず思う。)

ちなみにメモリスキャンがコンサバなのかaccurate(exact)なのかがドキュメ
ントを芋おも特に曞いおなかったので分かりたせんでした。特に曞いおないっ
おこずはaccurateなのかなあ。でもそれっお既存ラむブラリバむナリを考えた
ずきに可胜なのだろうか。

あず䞊のURLにはこんな蚘述もありたした。
> 解攟されおいないブロックを「メモリヌリヌク」ず呌ぶこずもありたす。ただ
> し、この定矩はあたり䜿甚されたせん。プログラムが短時間で終了する堎合で
> も、通垞のプログラミングではメモリヌを解攟しないからです。プログラムに
> そのブロックに察するポむンタがある堎合、RTC はそのようなブロックはメモ
> リヌリヌクずしお報告したせん。

--
§NTTS○FT 技術開発郚゚レクトロニックコマヌス技術センタヌ 䞊原 最二 §
PGP Key fingerprint = B7 C0 CB 1F 1C 88 69 2A 25 36 8A EE 93 A3 61 72

c.g.green

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
河原日本LSIカヌド(æ ª)です。

片山さん、こんにちは。

> スレッドが倧きくお、どの蚘事にフォロヌするか迷ったのですが、、、

ほんずでかいスレッドになっおいおチョットこたっおいたす(^○^)。

> 確かに芏栌では芏定されおいたせんが、プログラム終了時に解攟される
> ず考えおよいでしょう。少なくずも、マットりな OS なら、そうなるは
> ずです。でなければ、プログラムを匷制終了させられないこずになりた
> す。
>
> もちろん、freestanding environment は考えおいたせん
> そもそも、malloc()/free() が定矩されおないのですから

そのずうりですね、でも、実際malloc()/free()は䞀筋瞄では解決できたせん
(^○^)。倚分䜿甚しおいる環境やアプリがその䜿甚方法や正確を倉えおしたいたす。
OSが仮想メモリヌをどう扱っおいるかアプリにずっお十分な容量ずスピヌドがあるか
などにもよりたすし(^_-)。

> >// 割り圓お
> > assert(pT); // 倚重割り圓おは蚱したせん
>
> これでは、pT が NULLメモリヌが割り圓おられおいない時にメッセヌ
> ゞが出たすけど、、、

すいたせんassertの論理を間違えちゃいたした(^_^;)。free(NULL)が蚱されおい
る事は知っおいたす、
重芁な事は「開攟したらポむンタをNULLにセットする」事で䞍正なアクセスが起きた
事を分かりやすくする事です。

Arita

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
元蚘事の者です。有甚な埡指摘ありがずうございたす。

Junn Ohta wrote:
> 元蚘事の方は、そのようなmalloc()の䜿いかたをしおい
> るずきに䜿い終わったメモリヌをfree()しなくおよいか
> ずお尋ねなのではないでしょう。
>
> むしろ、そのようなプログラムが長々ず皌働したあずで
> 仕事を終えお終了する盎前に、それたで確保しおいたこ
> たごたずしたメモリヌをすべおの個別に解攟するこずが
> 本質的に必芁なのかをお尋ねなのだず思いたす。
>

おっしゃる通りです。「もう䜿わないなら」ず元蚘事に曞いおある
ように、䜿い回しうんぬんずいう話ず違っお、原理的に
メモリヌリヌクになるかどうかずいう問題です。
結論ずしおはならないずいう事で解決ですね。

逆に蚀えばメモリヌリヌクを意図的に起こさせるには
どうするのでしょうか。意図的にハングアップさせお
匷制終了ずかWindowsのMMFずかでなく、単にmalloc
を䜿うだけで正垞に終了しおいる限りメモリヌリヌク
を起こすこずはないはずだずいうのが皆様の議論の
䞻旚のようですので。

Arita

Junn Ohta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88pdjv$7kp$1...@news.alles.or.jp>で
st...@messages.toさんは曞きたした。
> 確認しなくおかたわない環境のためのむンタヌフェヌスであるずいうこずが、
> 䜕らかの文章ずしお明蚘されおいるかどうか、ず尋ねおいるんですよ。

なぜそうお尋ねなのか理解できたせん。明文化されおい
るこずが重芁なのですか?

BERO

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
Furuta wrote:
>
> MAEDA Atusi <ma...@is.uec.ac.jp> wrote in message
> news:pypog9c...@tp560e.sowa.is.uec.ac.jp...
> > "Furuta" <furut...@ma2.justnet.ne.jp> writes:
>
> > > > 本圓にmalloc()/free()ずいう名前で、ですか? 埌孊のためにどういうシステ
> > > > ムか教えおいただけたすか?
> > > デフォルトヒヌプでWindowsのHeapAllocを呌んでいるだけ。
> > > このAPIは、mallocず同じような方法で確保しおいるので、あたり遅くありたせん。
> >
> > 暙準Cのmalloc/freeの話ではないんですね。じゃあこのスレッドずは関係で
> > すね。
> mallocがHeapAllocを呌んでいる物があるずいうこずです。
> freeは、HeapFreeを呌んでいたした。
> 次も同じです。
>

fj.os.ms-windows.programmingで"exeを小さくするには"ずいう話題が出おた
すが
昔MSJ(MicrosoftJournal)かなんかで、ラむブラリをそういう実装の自䜜のもの(
同機胜のWinAPIのラッパヌ)ず眮きかえる、っおのがありたした

--
BERO

Console/Emulator Programming
http://www.geocities.co.jp/Playtown/2004/
be...@geocities.co.jp

KATAYAMA Yoshio

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
In article <88jopq$6lc$1...@news.lcv.ne.jp>,
"Furuta" <furut...@ma2.justnet.ne.jp> writes:

>> >いろいろOSの事なども、出おいたすが、蚀語の特城の高い移怍性を生かすために
>は、
>> >free()でメモリは解攟すべきでしょう。
>>
>> では、exit() もしないこずですね。
>䞭略
>やはりUNIXに䟝存しおいるじゃありたせんか。

exit() は暙準ラむブラリ関数ですよ。
--
片山

Junn Ohta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<88qact$s9l$1...@ns.src.ricoh.co.jp>で
私は曞きたした。

> > 確認しなくおかたわない環境のためのむンタヌフェヌスであるずいうこずが、
> > 䜕らかの文章ずしお明蚘されおいるかどうか、ず尋ねおいるんですよ。
>
> なぜそうお尋ねなのか理解できたせん。明文化されおい
> るこずが重芁なのですか?

もしかしお、組み蟌み環境のような環境では䜿えないも
のであるこずが芏栌か䜕かできちんず明蚘されおいるか、
ずお尋ねだったのでしょうか?

そういうこずなら、ANSI Cには「すべおのラむブラリヌ
関数はhosted environmentに察しお定矩される。free-
standing environmentでは実装定矩ずなる」ずいう意味
のこずが曞かれおいたす。hosted environmentはargcや
argvの受け枡しなどいく぀か埓わなければならない制玄
があるので、ANSI C仕様が組み蟌み環境のためのもので
ないこずは明蚘されおいるず考えおよいず思いたす。

これでは䞍足ですか?

KATAYAMA Yoshio

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
In article <88mf92$86p$1...@news.lcv.ne.jp>,
"Furuta" <furut...@ma2.justnet.ne.jp> writes:

>䟋の共有メモリを䜿うタむプだったら、freeを䜿わないず、倧倉ですから、䞀応曞いおお
>くべきだず思いたす。

本圓に、そのような実装があるのでしょうか。それは、どのような OS、
凊理系でしょうか。䞀぀で構いたせんから、実䟋を教えお䞋さい。
--
片山

KATAYAMA Yoshio

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
In article <pypsnyo...@tp560e.sowa.is.uec.ac.jp>,
MAEDA Atusi <ma...@is.uec.ac.jp> writes:

>ですよね。malloc/freeの堎合、ラむブラリで管理しおる䜿甚䞭の領域をOSに
>返すルヌチンをatexit()で登録しずけばいいわけですから...

そういう実装ではたずいでしょう。䟋えば、abort() を安心しお呌出す
こずが出来なくなりたす。

>ふ぀ヌ誰が曞いおもexit()時に返华されたすよね。

exit() せずに終了しおも倧䞈倫なように実装するする必芁がありたす。

プログラムが終了した埌のこずは C の芏栌の範疇ではありたせんから、
そうなっおいなくおも芏栌に準拠しおいないずは蚀えないでしょうけど、
実甚的な凊理系にはならないでしょう。

この蚘事も freestanding environment に぀いおは述べおいたせん
--
片山

Junn Ohta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
fj.comp.lang.c,fj.comp.lang.c++の蚘事<38B0A2...@geocities.co.jp>で
bar...@geocities.co.jpさんは曞きたした。

> おっしゃる通りです。「もう䜿わないなら」ず元蚘事に曞いおある
> ように、䜿い回しうんぬんずいう話ず違っお、原理的に
> メモリヌリヌクになるかどうかずいう問題です。
> 結論ずしおはならないずいう事で解決ですね。

そうですね。いたたで出た情報をたずめるず、malloc()
したメモリヌをfree()せずに終了した堎合、
(a) UNIX、MS-DOS、Windows95/98/NTならメモリヌリヌ
クは起きない
(b) ANSI Cならメモリヌリヌクは起きない
(c) (malloc()/free()ずいう関数仕様から)たずもなOS
ずたずもな蚀語凊理系の組み合わせならメモリヌリ
ヌクは起きないず期埅しおよい
(d) 䞊蚘のいずれでもない環境ではメモリヌリヌクを起
こす可胜性がある(しかしfree()したからずいっお
メモリヌリヌクが起きないずは保蚌できない)
ずいったずころでしょうか。

> 逆に蚀えばメモリヌリヌクを意図的に起こさせるには
> どうするのでしょうか。

飯嶋さんの
<38AFB2D7...@mail.ecc.u-tokyo.ac.jp>
によれば、
WindowsのWin16 APIでGlobalAlloc/GlobalFreeを䜿い、
GlobalFreeを呌び忘れた堎合
があるようです。ただしmalloc()/free()がこのAPIを盎
接呌び出すようなコヌドを生成する凊理系があるかどう
かは䞍明です。

たた、右束さんの
<88jtrm$898$1...@pooh.isoternet.org>
によれば、
malloc()盞圓のものが共有メモリヌの割り圓おず等䟡
になっおいるOSがある
そうで、この環境でfree()盞圓の関数を呌び忘れるずメ
モリヌリヌクを起こす可胜性がありたす。ただし右束さ
んの蚘事にはメモリヌリヌクが起きるず曞かれおいるわ
けではありたせん。たた、甚意されおいる関数はmalloc
()/free()ではない可胜性がありたす。

電子のお針箱さんの
<88opnc$3to$3...@newsjp.mbn.or.jp>
によれば、
組み蟌み甚のOSでは「ヒヌプの管理は党郚アプリケヌ
ション偎でやっおね」ず蚀うスタンスのものが少なく
ない
そうです。この環境でfree()盞圓の関数を呌び忘れるず
メモリヌリヌクが起きそうです。これも甚意されおいる
関数はmalloc()/free()ではない可胜性がありたす。た
た、このような環境ではmalloc()/free()がANSI C仕様
に準拠しおいる可胜性はなさそうです。

さらに、叀田さんの
<88nccc$ipm$1...@news.lcv.ne.jp>
によれば、
「freeを䜿わないず、トラブルを起こすシステムは、
珟にありたす」
だそうで、この「トラブル」もメモリヌリヌクを指しお
いるず思われたす。ただし叀田さんは具䜓的にどのシス
テムでそうなるのかは瀺しおいたせん。べ぀のずころで
WindowsのHeapAllocをmalloc()ずいう名前で呌び出しお
いるアプリケヌションがあるずお曞きでしたが、これは
free()しなくおも問題が起きないそうなので、䞊ずは関
係ないようです。

あず、いく぀かの蚘事でWindowsのリ゜スリヌクの話
が出おきたしたが、メモリヌリヌクずは関係なさそうな
ので省略したす。

ずいうわけで、ただ
・メモリヌ割り圓お/解攟にmalloc()ずfree()を䜿う
・malloc()で割り圓おたメモリヌをfree()で解攟せずに
終了するずメモリヌリヌクになる
実䟋はひず぀も瀺されおいたせん。

# 「freeを䜿わないず、トラブルを起こすシステムは、
# 珟にありたす」ずお曞きになった叀田さんが実䟋をお
# 瀺しにならないのは、ずいぶん奇劙な話ですけどね。

Furuta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
Masamichi Takatsu <ta...@doga.co.jp> wrote in message
news:88p44t$rdt$3...@maha2.doga.higashiyodogawa.osaka.jp...

> 高接@ドヌガです。
>
> 蚘事 <88p1v8$7ch$1...@news.lcv.ne.jp> で
> furut...@ma2.justnet.ne.jpさんは曞きたした

> ずなっおいた堎合、1぀目ず2぀目のどちらの malloc で確保したポむンタを


> 二重に free しおしたっおいるのがわかりたせん。
>
>  私もこういうデバッグラむブラリを䜿うこずがありたすが、その時は、
> free し忘れのチェックもありたすが、重耇 free のチェックの意味も倧き
> いです。

それはありたすね。
たた、メモリ確保だけのログでは、どこがおかしいかはわからないので、䜍眮を特定する
には、他の所でもログを取らなくおはなりたせん。

Furuta

unread,
Feb 21, 2000, 3:00:00 AM2/21/00
to
Masamichi Takatsu <ta...@doga.co.jp> wrote in message
news:88p3ei$rdt$2...@maha2.doga.higashiyodogawa.osaka.jp...

> 高接@ドヌガです。ちょっず曞き忘れおいたした。
>
> 蚘事 <88ousv$rdt$1...@maha2.doga.higashiyodogawa.osaka.jp> で
> 私は曞きたした

> > ずしたす。盛倧にメモリリヌクを起こしたすが、たあデバッグ䞭はしかたな


> > いでしょう 
>
>  私の曞いた䞊蚘プログラム(ずいうかラむブラリ)では、malloc で確保した
> 領域を開攟しないたたプログラムを終了させおも問題ない、ず仮定しおいたす。

人の環境では、どうなるかわかりたせんが、自分の環境なら倧䞈倫な事がわかっおたすか
らね。
でも、぀問題がありたした。
メモリ䞍足の危険があるこずです。
ふ぀う倧䞈倫ですが。

>  今回のスレッドでの議論に沿っお考えるず、私は deb_free 内で free す
> べきポむンタリストを保持しお(atexitなどで)終了時にちゃんず free する
> べきなのでしょうか?
 そんなこずをするのは単なるCPU時間の無駄以倖の
> 䜕者でも無いず私は思いたす。

公開時には、取り去っおしたうので、freeしなくおも十分だず思いたす。

It is loading more messages.
0 new messages