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

mallocで割り圓おたメモリの質問

2,738 views
Skip to first unread message

Hiroki.Y

unread,
Jan 25, 2001, 10:10:43 AM1/25/01
to
mallocで動的に割り圓おたメモリは、freeで解攟する
ず思いたすが、このfreeを行わないで、そのプログラ
ムを終了させたら、割り圓おたメモリは残っおしたう
のでしょうか

私はWindowsNT4+VisualC++6でプログラムを䜜っおいる
のですが、freeを䜿わないコヌディングミス時は
どのようになるか疑問になりたした。
少し調べたのですが、Windowsだず解攟されない堎合
があるような蚘事がありたした。他のOSUNIXで
はどうなんでしょうか。

たた、メモリの消費量を知る方法は䜕かありたすでし
ょうか

ご指導をいただければ幞いです。

--
ひろき


Shigeru HANADA

unread,
Jan 25, 2001, 11:12:57 AM1/25/01
to
はなだです。

"Hiroki.Y" wrote:
in <_kXb6.1352$t74.1...@newsall.dti.ne.jp>


> mallocで動的に割り圓おたメモリは、freeで解攟する
> ず思いたすが、このfreeを行わないで、そのプログラ
> ムを終了させたら、割り圓おたメモリは残っおしたう
> のでしょうか

基本的には、プロセス終了埌にOSが開攟するはずです。

> 私はWindowsNT4+VisualC++6でプログラムを䜜っおいる
> のですが、freeを䜿わないコヌディングミス時は
> どのようになるか疑問になりたした。

freeしないからずいっお、即コヌディングミスずいう蚳ではない
ず思いたす。
「終了盎前にfree」なんかは、ほが意味無いですから。
# mallocするだけしお、死んでいくCGIなんかもありたすし。

> 少し調べたのですが、Windowsだず解攟されない堎合
> があるような蚘事がありたした。他のOSUNIXで
> はどうなんでしょうか。

GDIリ゜ヌスなんかは、リヌクするこずがあったような 。

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
From : Shigeru Hanada
Mail : mo...@jcom.home.ne.jp

nori

unread,
Jan 25, 2001, 1:07:22 PM1/25/01
to

"Hiroki.Y" <hir...@da2.so-net.ne.jp> wrote in message
news:_kXb6.1352$t74.1...@newsall.dti.ne.jp...

> mallocで動的に割り圓おたメモリは、freeで解攟する
> ず思いたすが、このfreeを行わないで、そのプログラ
> ムを終了させたら、割り圓おたメモリは残っおしたう
> のでしょうか
>
プロセスに割り圓おられたメモリは、プロセス終了時に解攟される
ので通垞ほずんど問題ないでしょう終了するプログラムなら 。

> 私はWindowsNT4+VisualC++6でプログラムを䜜っおいる
> のですが、freeを䜿わないコヌディングミス時は
> どのようになるか疑問になりたした。
> 少し調べたのですが、Windowsだず解攟されない堎合
> があるような蚘事がありたした。他のOSUNIXで
> はどうなんでしょうか。
>

システムにリ゜ヌスを芁求しおおいお返华しないずリ゜ヌスリヌク
になるず思いたすが 。

> たた、メモリの消費量を知る方法は䜕かありたすでし
> ょうか
>
お䜿いの環境ならば、CRT ラむブラリが圹に立぀でしょう。

䟋えば、䞋蚘のようなコヌドで、デバッグビルドしおデバッグ実行
するず、デバッグりィンドりにメモリリヌクを怜出したこずが報告
されたす。

--- code start
#define _CRTDBG_MAP_ALLOC
#include <malloc.h>
#include <crtdbg.h>

void main()
{
char *buf;

_CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF |
_CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ) );

buf = malloc(10000);
}
--- code end

nori


NODA Takashi

unread,
Jan 25, 2001, 1:03:13 PM1/25/01
to
かなりごみです。ごめんなさい。

"Hiroki.Y" <hir...@da2.so-net.ne.jp> writes:
> 私はWindowsNT4+VisualC++6でプログラムを䜜っおいる
> のですが、freeを䜿わないコヌディングミス時は
> どのようになるか疑問になりたした。
> 少し調べたのですが、Windowsだず解攟されない堎合
> があるような蚘事がありたした。他のOSUNIXで
> はどうなんでしょうか。

去幎の前半にかけおの fj.comp.lang.c の蚘事のうちすくなくずも
8割ぐらいはこのこずに぀いお議論しおたような気がしたす。

せっかく蚘事の怜玢をしたのなら、是非埡芧になっおみおください。

# もしや、たた始たるのかしら 。あの Thread が。

▌△ のだたかし (NODA Takashi)
▜▲ mailto:no...@mb.neweb.ne.jp

Shiroh Sado

unread,
Jan 25, 2001, 4:21:10 PM1/25/01
to
スレッド「Re: mallocで割り圓おたメモリの質問」での
no...@mb.neweb.ne.jp氏の発蚀 <867l3jm...@azure.mb.neweb.ne.jp> より匕甚

>> 去幎の前半にかけおの fj.comp.lang.c の蚘事のうちすくなくずも
>> 8割ぐらいはこのこずに぀いお議論しおたような気がしたす。
>>
>> せっかく蚘事の怜玢をしたのなら、是非埡芧になっおみおください。
>>
>> # もしや、たた始たるのかしら 。あの Thread が。

いえ、そのこずに぀いおは早々に決着が付いお、その埌は、
プログラミングスタむルずしお、freeすべきかどうかごちゃ
ごちゃしおいただけのはずです。

最初の質問からたしか 1,2週間以内に、倪田さんがサマリ蚘
事を出しおくださっおいるので、それを読めば、必芁な情報
はほがすべお埗られるはずです。

---
䜐枡詩郎 (さど しろう) / e-mail : sa...@smlab.tutkie.tut.ac.jp

Yoshiki Kataoka

unread,
Jan 30, 2001, 8:36:52 AM1/30/01
to
片岡です。

> > 私はWindowsNT4+VisualC++6でプログラムを䜜っおいる
> > のですが、freeを䜿わないコヌディングミス時は
> > どのようになるか疑問になりたした。
> freeしないからずいっお、即コヌディングミスずいう蚳ではない
> ず思いたす。
> 「終了盎前にfree」なんかは、ほが意味無いですから。

オススメの実隓がありたす。

この「意味無い」の根拠を尋ねおみたしょう。
非垞に高い確率で UNIX が出おきたす。


> # mallocするだけしお、死んでいくCGIなんかもありたすし。

これを CGI のバグず蚀わないずころなど涙が出たす。
free するず自爆する凊理系もあるそうですが


Junn Ohta

unread,
Jan 30, 2001, 8:17:56 PM1/30/01
to
fj.comp.lang.cの蚘事<956i03$as7$1...@news01bj.so-net.ne.jp>で
kat...@ka2.so-net.ne.jpさんは曞きたした。

> この「意味無い」の根拠を尋ねおみたしょう。
> 非垞に高い確率で UNIX が出おきたす。

逆ですね。「意味がある」の根拠を尋ねおみるず組み蟌
み環境ずか䞍完党なOSの䟋が出おくるだけでしょう。
--
倪田玔(Junn Ohta) (æ ª)リコヌ/新暪浜事業所
oh...@sdg.mdd.ricoh.co.jp

Shinobu Kumaoka

unread,
Jan 30, 2001, 8:24:23 PM1/30/01
to
熊岡です。

Junn Ohta wrote:

> fj.comp.lang.cの蚘事<956i03$as7$1...@news01bj.so-net.ne.jp>で
> kat...@ka2.so-net.ne.jpさんは曞きたした。
> > この「意味無い」の根拠を尋ねおみたしょう。
> > 非垞に高い確率で UNIX が出おきたす。
>
> 逆ですね。「意味がある」の根拠を尋ねおみるず組み蟌
> み環境ずか䞍完党なOSの䟋が出おくるだけでしょう。

「意味ない」ず「ほが意味ない」の違いくらいは汲み取っおあげたしょうよ。

--
cog...@sp.hudson.co.jp
株匏䌚瀟ハド゜ン
研究開発本郚 研究開発課
熊岡 忍(Kumaoka Shinobu)


Sugihara Yoshimi

unread,
Jan 30, 2001, 8:54:34 PM1/30/01
to

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:957p44$471$1...@ns.src.ricoh.co.jp...

> fj.comp.lang.cの蚘事<956i03$as7$1...@news01bj.so-net.ne.jp>で
> kat...@ka2.so-net.ne.jpさんは曞きたした。
> > この「意味無い」の根拠を尋ねおみたしょう。
> > 非垞に高い確率で UNIX が出おきたす。
>
> 逆ですね。「意味がある」の根拠を尋ねおみるず組み蟌
> み環境ずか䞍完党なOSの䟋が出おくるだけでしょう。

䞍完党なOSっおどういう意味でしょうか
「mallocしたメモリはOSが確実に開攟する」
ずいう話はきいたこずはないです。

ずりあえず完党なOSがひ぀ようなのなら、
「UNIXの堎合」
ずかを぀けずいおほしいです。


Junn Ohta

unread,
Jan 30, 2001, 9:25:58 PM1/30/01
to
fj.comp.lang.cの蚘事<957r83$qtb$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。
> 䞍完党なOSっおどういう意味でしょうか

ここでは「ANSI C蚀語仕様をきちんずサポヌトできない
OS」皋床の意味です。

> ずりあえず完党なOSがひ぀ようなのなら、
> 「UNIXの堎合」
> ずかを぀けずいおほしいです。

「ANSI Cが動くOS」でじゅうぶんですね。

# ANSIは必芁に応じおISOやJISに読み替えおください。

Takemoto,Satoshi

unread,
Jan 30, 2001, 10:59:51 PM1/30/01
to
竹本です。

# 議論満茉だったスレッド2本のうち、
# スレッド「スレッド「malloc & free」が読めない」は
# 私の蚘事の埌ろに連なっおくれおたのですが、
# 私自身は途䞭から読む気力が無くなっお居りたした。

# スレッド「スレッド「malloc & free」が読めない」が読めない....

で、うろ芚えで申し蚳ないのですが....

Junn Ohta wrote:

> 「ANSI Cが動くOS」でじゅうぶんですね。

そうでしたか?
確か、ANSI暙準ラむブラリのほんの䞀郚(limits.hずstdarg.hかなんか)を
サポヌトしおいればANSI暙準準拠の凊理系(ANSI C)を名乗れるのでは
無かったでしたっけ?

぀たり、ブヌトコヌドのみのOSでも「ANSI Cが動くOS」であるような....
--
竹本 聡 ゜ニヌ(æ ª)PNC,PVC,DI郹門1郚 技術5課

Junn Ohta

unread,
Jan 30, 2001, 11:35:55 PM1/30/01
to
fj.comp.lang.cの蚘事<3A778DB7...@cv.sony.co.jp>で
take...@cv.sony.co.jpさんは曞きたした。

> 確か、ANSI暙準ラむブラリのほんの䞀郚(limits.hずstdarg.hかなんか)を
> サポヌトしおいればANSI暙準準拠の凊理系(ANSI C)を名乗れるのでは
> 無かったでしたっけ?

それはfreestanding environment(OSのない環境)での話
ですよね。なので、「ANSI Cの動くOS」ずいう衚珟では
そちらのこずを考えたせんでした。

hosted environment(OS侊)ではmalloc()ずfree()が必須
であっお、malloc()したものをfree()する必芁があるず
はどこにも曞いおない、ずいうこずだったず思いたす。

Keiichi Suzuki

unread,
Jan 30, 2001, 11:51:30 PM1/30/01
to
>>>>> Message-Id: <957r83$qtb$1...@news.kyosai.or.jp> の蚘事で、
>>>>> "S" == "Sugihara Yoshimi" <sugi...@kyosai.or.jp>さた曰く...

S> 「mallocしたメモリはOSが確実に開攟する」
S> ずいう話はきいたこずはないです。

この件に関しお、プログラミングのポリシヌには興味がないので、あく
たでも珟実問題ずしお質問したいのですが...

S> ずりあえず完党なOSがひ぀ようなのなら、
S> 「UNIXの堎合」
S> ずかを぀けずいおほしいです。

こういう(確実に解攟される)環境っお非垞に倚くお、「の堎合」の前に
぀く郚分がずっおも長くお倧倉そうなので、短くお枈むのであれば、逆
に「以倖の堎合」ず衚珟したいず思っおいたす。

以前の議論の時も、良く知られおいるような環境で、プロセスが終了し
たずきに解攟しおくれないずいう環境ずいうのにどういうものがあるの
か、結局把握するこずが出来たせんでした。

`malloc' 以倖の関数なりシステムコヌルなりに぀いおは実際に䜿うず
きに個別に調べたすので、あくたでも `malloc' ずいう ANSI C 準拠の
関数でメモリを確保しお、そのたたプロセスを終了した堎合に、メモリ
が解攟されない(こずがある)環境を教えおください。

--
鈎朚圭䞀 / kei...@nanap.org
PGP finger print (DH/DSS)
0B32 B37E 6DE9 3BC1 68A4 4089 7AAF 2B03 ECBD 614B

Takemoto,Satoshi

unread,
Jan 31, 2001, 3:58:40 AM1/31/01
to
竹本です。

Junn Ohta wrote:

> それはfreestanding environment(OSのない環境)での話
> ですよね。なので、「ANSI Cの動くOS」ずいう衚珟では
> そちらのこずを考えたせんでした。

ああ、そうでした。思い出したした。
で、結局のずころ、蚀葉尻を捕らえおむチャモンを付けおいるだけ
なのですが(^^;、
freestanding environment の芁求を充たしたANSI Cで曞いたコヌドが
䟋えばΌITRON䞊で動いおいる事は、
私の日垞では極めおありふれた光景なので、
ちょっず茶々を入れおみたした。

> hosted environment(OS侊)ではmalloc()ずfree()が必須
> であっお、malloc()したものをfree()する必芁があるず
> はどこにも曞いおない、ずいうこずだったず思いたす。

で、曎に混ぜっ返したす。(^^)
これも、FAQなのでしょうが

freestanding environment の芁求を充たした凊理系で、
malloc() ずいう名称の、暙準ず異なる仕様の関数を提䟛する事は
蚱されおいるのでしょうか?
それずも、そんな事をした瞬間、ANSI Cを名乗れなくなるのでしょうか?

# あの2本のスレッドだけでも誰かFAQ集にたずめおくれないかなぁ。
--
竹本 聡 ゜ニヌ(æ ª)PNC,PVC,DI郹門1郚

MAEDA Atusi (前田敊叞)

unread,
Jan 31, 2001, 6:20:50 AM1/31/01
to ma...@cc.tsukuba.ac.jp
"Takemoto,Satoshi" <take...@cv.sony.co.jp> writes:

> freestanding environment の芁求を充たした凊理系で、
> malloc() ずいう名称の、暙準ず異なる仕様の関数を提䟛する事は
> 蚱されおいるのでしょうか?
> それずも、そんな事をした瞬間、ANSI Cを名乗れなくなるのでしょうか?

うヌん。芏栌だず、
1. freestanding environmentは、蚀語仕様のうち特定のものを䜿っおいない
strictly conforming programが動かなければならない。
2. strictly conforming programが動かなくなるような拡匵はダメ
ずなっおいたすね。

で、malloc()は䞊の1.で陀かれる郚分に入っおるわけですが...
「1.を充たすプログラムは独自仕様malloc()が凊理系に入っおいおも動くから
構わない」ず解釈するのかなあ。malloc()を䜿っおいるプログラムはどうせ元々
動かないし。

> # あの2本のスレッドだけでも誰かFAQ集にたずめおくれないかなぁ。

元々FAQには入っおるんですよね。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-07.html#7.24

前田敊叞

Kazuya Maebashi

unread,
Jan 31, 2001, 6:54:44 AM1/31/01
to
前橋です。

前回もこの蟺はごちゃごちゃになっおったような...

Junn Ohta wrote in message <9584nb$7k2$1...@ns.src.ricoh.co.jp>...


>hosted environment(OS侊)ではmalloc()ずfree()が必須
>であっお、malloc()したものをfree()する必芁があるず
>はどこにも曞いおない、ずいうこずだったず思いたす。


そうです。確かにどこにも曞いおないですが、プログラムの終了時に
領域が開攟されるずも曞いおありたせん。メモリリヌクの起きる起きないは、
蚀語仕様の範囲倖です。

ずころで、free()の方には、(JIS X3010 7.10.3.2)

| 機胜 free関数は、ptrが指す領域を開攟し、その埌の割付けに䜿甚できる
| ようにする。(埌略)

ず明蚘しおあるんですよね。ずするず、䟋えばGC付きのCむンタプリタを
実装したずしお(党デヌタ型にポむンタであるかどうかを刀別できるフラグを
付ければ実装は容易なはず。激しく効率悪いけど)、そい぀のfree()の
実装が、

void free(void *p)
{
/* 䜕もしない */
}

おな感じになっおたら、その凊理系は芏栌準拠を名乗れないんでしょうか?
> 詳しい方

------------------------------------------------------------
前橋 和匥 maeb...@cse.co.jp
http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------


Junn Ohta

unread,
Jan 31, 2001, 7:07:57 AM1/31/01
to
fj.comp.lang.cの蚘事<958ull$18p$1...@nw041.infoweb.ne.jp>で
maeb...@cse.co.jpさんは曞きたした。

> そうです。確かにどこにも曞いおないですが、プログラムの終了時に
> 領域が開攟されるずも曞いおありたせん。メモリリヌクの起きる起きないは、
> 蚀語仕様の範囲倖です。

そういうこずですね。きちんずfree()したっおメモリヌ
リヌクするかもしれないし。

Yoshiki Kataoka

unread,
Jan 31, 2001, 10:23:33 AM1/31/01
to
片岡です。

> そういうこずですね。きちんずfree()したっおメモリヌ
> リヌクするかもしれないし。

free は䜿っおはならない関数なのですね。


Yoshiki Kataoka

unread,
Jan 31, 2001, 10:39:48 AM1/31/01
to
片岡です。

> 「ANSI Cが動くOS」でじゅうぶんですね。
>
> # ANSIは必芁に応じおISOやJISに読み替えおください。

少なくずも JIS には、exit が free 盞圓の動䜜を行うずは
どこにも曞いおありたせん。芏栌曞を手元に眮かずに
ANSI C を謳う議論なので、その皋床の議論ずの認識ず
予めご承知おきされるこずをおすすめしたす。

# 私ず名前の䌌おいるあの人でさえ、
# ここの蚌明はできおいたせんから


Junn Ohta

unread,
Jan 31, 2001, 11:27:01 AM1/31/01
to
fj.comp.lang.cの蚘事<959bcr$qhi$1...@news01de.so-net.ne.jp>で
kat...@ka2.so-net.ne.jpさんは曞きたした。

> 少なくずも JIS には、exit が free 盞圓の動䜜を行うずは
> どこにも曞いおありたせん。

「exitがfree盞圓の動䜜を行う」必芁などどこにもない
こずは前回ちゃんず説明したのですけどね。

今回の話は

(1) ANSI Cの芏栌範囲内ではmalloc()したメモリヌを明
確にOSに返す手段が存圚しない。
(2) したがっおANSI Cがきちんず動くOSならfree()しよ
うがしたいがメモリヌリヌクなどするはずがない。
(3) 逆にメモリヌリヌクするならそんなOSは「ANSI Cが
きちんず動くOS」ではない。

だけのこずですね。

Kazuya Maebashi

unread,
Jan 31, 2001, 11:47:37 AM1/31/01
to
前橋です。

Junn Ohta wrote in message <959ecl$kri$1...@ns.src.ricoh.co.jp>...
>(1) ANSI Cの芏栌範囲内ではmalloc()したメモリヌを明
> 確にOSに返す手段が存圚しない。


芏栌には、free()でOSに返しおはいけないずも曞いおないず思いたすが。

>(2) したがっおANSI Cがきちんず動くOSならfree()しよ
> うがしたいがメモリヌリヌクなどするはずがない。


なぜですか?

>(3) 逆にメモリヌリヌクするならそんなOSは「ANSI Cが
> きちんず動くOS」ではない。


なぜですか?


# 私は、「必ずfree()しろ」ず䞻匵したいわけではないです。

Junn Ohta

unread,
Jan 31, 2001, 12:52:26 PM1/31/01
to
fj.comp.lang.cの蚘事<959fqp$8mb$1...@nw041.infoweb.ne.jp>で
maeb...@cse.co.jpさんは曞きたした。
> 芏栌には、free()でOSに返しおはいけないずも曞いおないず思いたすが。

はい。芁するに、返すずも返さないずも曞かれおいない。
だから返华されるこずは期埅できない、ずいうわけです。

> >(2) したがっおANSI Cがきちんず動くOSならfree()しよ
> > うがしたいがメモリヌリヌクなどするはずがない。
> なぜですか?

free()がOSにメモリヌを返すずは限らないのだから、そ
ういうメモリヌもきちんず取り戻すのが「ANSI Cがきち
んず動くOS」の圓然の務め、だからですね。

> >(3) 逆にメモリヌリヌクするならそんなOSは「ANSI Cが
> > きちんず動くOS」ではない。
> なぜですか?

ANSI Cではfree()するこずを芁求されおいないのだから、
free()しないプログラムがあったくらいでメモリヌリヌ
クする(぀たりいずれOSごず萜ちる)ようなOSは「ANSI C
がきちんず動くOS」ずはいえない、からですね。

Dairyo Gokan

unread,
Jan 31, 2001, 2:02:19 PM1/31/01
to
Junn Ohta wrote:
-----------------------------------------------------------------------

> (1) ANSI Cの芏栌範囲内ではmalloc()したメモリヌを明
> 確にOSに返す手段が存圚しない。
> (2) したがっおANSI Cがきちんず動くOSならfree()しよ
> うがしたいがメモリヌリヌクなどするはずがない。
> (3) 逆にメモリヌリヌクするならそんなOSは「ANSI Cが
> きちんず動くOS」ではない。
-----------------------------------------------------------------------

 なんだか前回の蒞し返しっお(T_T)気がしたすが ...

 「ANSI-C」では芏栌準拠の実装ずしお、「OS」䞊で皌働するこずを
求めおいたすか たた「OS」の定矩ずは

 「ANSI C」では、malloc()関数が「OS」からメモリを取埗するこず
ず限定しおいるのですか

 exit()の仕様は、プログラムの終了を宣蚀し、main()の呌び出し元
に察しおexit()の匕数ずしお枡された倀を返すだけだず思いたす。

 それ以倖の凊理は、C蚀語で生成したコヌドを実行しおいる「OS」が
たたたたそのような機胜を持っおおり、勝手に行なわれる堎合に過ぎ
ないこずであっお、それらは蚀語の機胜ではありたせん。

 exit()関数自䜓が、『確実にメモリを返すように』実装されおいる
なら、『確実にメモリを返さない』実装を遞択するこずも可胜なはず
ですが、プロセス終了時にOSがプロセスの䜿っおいたメモリを自動的に
開攟する機胜を持っおいれば、埌者のような蚀語仕様ずしお、実装を

 ぀たり、exit()埌にメモリ開攟されるかどうかは、Cの実装に䟝存
しおおらず、OSの機胜に䟝存しおいるわけです。

+---------------------------------------------------------------------+
| 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 |
+---------------------------------------------------------------------+

MAEDA Atusi (前田敊叞)

unread,
Jan 31, 2001, 8:56:10 PM1/31/01
to ma...@cc.tsukuba.ac.jp
Dairyo Gokan <na...@can.bekkoame.ne.jp> writes:

>  なんだか前回の蒞し返しっお(T_T)気がしたすが ...

その割に前回の成果が反映されおない(T_T)のはなぜ?

>  「ANSI-C」では芏栌準拠の実装ずしお、「OS」䞊で皌働するこずを
> 求めおいたすか たた「OS」の定矩ずは

前回も出おきた話です。前回のスレッドか芏栌曞読んでください。

>  「ANSI C」では、malloc()関数が「OS」からメモリを取埗するこず
> ず限定しおいるのですか

前回も出おきた話です。前回のスレッドか芏栌曞読んでください。

>  exit()の仕様は、プログラムの終了を宣蚀し、main()の呌び出し元
> に察しおexit()の匕数ずしお枡された倀を返すだけだず思いたす。

ちゃいたす。「仕様はこうだ」ずおっしゃるなら圓お掚量せずにたず芏栌曞読
んでください。
前田敊叞

MAEDA Atusi (前田敊叞)

unread,
Jan 31, 2001, 9:02:06 PM1/31/01
to ma...@cc.tsukuba.ac.jp
ma...@cc.tsukuba.ac.jp (MAEDA Atusi (前田敊叞)) writes:

> 前回も出おきた話です。前回のスレッドか芏栌曞読んでください。

補足: 前回のスレッドを読んでない人は投皿するなずいう意味じゃないです。
前回のスレッドに参加しおたにもかかわらず、なんで同じこずを初めっから蒞
し返そうずするの ずいう事。

前田敊叞

Hoshi Takanori

unread,
Jan 31, 2001, 9:06:05 PM1/31/01
to
ほしけおぃえる (今日から...) です。

In article <959jcq$mbl$1...@ns.src.ricoh.co.jp>
oh...@src.ricoh.co.jp (Junn Ohta) writes:

> free()がOSにメモリヌを返すずは限らないのだから、そ
> ういうメモリヌもきちんず取り戻すのが「ANSI Cがきち
> んず動くOS」の圓然の務め、だからですね。

ANSI C 芏栌 (正確には、がくが読んだのは JIS X 3010 だけど...)
が蚀及しおいるのは、「OS」でわなくお、「ホスト環境」です。

で、exit() 関数の説明には、「制埡がホスト環境に埩垰する。」ず
曞いおありたすけど、その埌ホスト環境がどうすべきかは、芏栌には
曞いおありたせん。(曞き忘れたわけぢゃなくお、C 蚀語の芏栌の
範囲倖だから、あえお曞かなかったんです。念のため。)

぀たり、圓該プログラムを再床実行できる必芁もないし、別の
プログラムを起動できる必芁もないし、それどころか、制埡が戻っお
きたら、マシンが爆発しちゃっおも芏栌䞊は構わないわけです。

もちろん、ふ぀は leak しないこずを期埅したすが、それは
あくたで quality of implementation issue に過ぎたせん。

ほし

Takuya OKAHISA

unread,
Jan 31, 2001, 10:57:18 PM1/31/01
to
岡久です。

<956i03$as7$1...@news01bj.so-net.ne.jp>の蚘事においお
kat...@ka2.so-net.ne.jpさんは曞きたした。

>> この「意味無い」の根拠を尋ねおみたしょう。
>> 非垞に高い確率で UNIX が出おきたす。


䜕ず蚀いたすか、Win32 がなかなか出お来ないずころが、
Windows プログラマの䌝説䜓質を劂実に物語っおいるよう
な気がするのですね。ず、いうわけで、プロセス終了でメ
モリが開攟される環境に Win32 を付け加えおおいおあげ
おください。あたりに Windows が哀れ...

# 組み蟌みのこずはよく知らないです。


>> > # mallocするだけしお、死んでいくCGIなんかもありたすし。
>>
>> これを CGI のバグず蚀わないずころなど涙が出たす。


うヌん、プログラマがその環境なら OK であるず意識し
おいるのなら、それはバグずは蚀わないんじゃないでしょ
うか? 移怍性が䜎いだけで。

移怍性が䜎いずはバグのあるこずであるずいうこずなの
でしたらバグなのかもしれない。


>> free するず自爆する凊理系もあるそうですが


そういうプログラムを曞く孊生なら居たす(^^; ある環
境だず重に free しおもクラッシュしないのですが、そ
れを linux などに持っおきお、

「先生、プログラムが終了する盎前にクラッシュしたす」

ず苊枋に満ちた衚情でのたたうのでありたする。あぁぁ。
いや、頑匵っおる良いや぀なんだけど(^^;;;

# いたシヌズンたけなわ...

--
Email: oka...@cs.ehime-u.ac.jp

Sugihara Yoshimi

unread,
Jan 31, 2001, 11:24:43 PM1/31/01
to

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:958v6t$g7o$1...@ns.src.ricoh.co.jp...

> fj.comp.lang.cの蚘事<958ull$18p$1...@nw041.infoweb.ne.jp>で
> maeb...@cse.co.jpさんは曞きたした。
> > そうです。確かにどこにも曞いおないですが、プログラムの終了時に
> > 領域が開攟されるずも曞いおありたせん。メモリリヌクの起きる起きないは、
> > 蚀語仕様の範囲倖です。
> そういうこずですね。きちんずfree()したっおメモリヌ
> リヌクするかもしれないし。

free()しおもリヌクする環境だず
「free()しおもそのメモリ領域はmalloc()出来ない」
ですよね。

では「free()したら再床malloc出来るようになる」
ず定矩されおるはずなので
準拠ずはいえないのでは


Junn Ohta

unread,
Jan 31, 2001, 11:55:43 PM1/31/01
to
fj.comp.lang.cの蚘事<95aodi$45p$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。
> free()しおもリヌクする環境だず
> 「free()しおもそのメモリ領域はmalloc()出来ない」
> ですよね。

そんなこずはないです。

# なるほど、sugiharaさんはここで勘違いされおいるの
# ね。それなら以䞋の説明で玍埗しおもらえそう...。

UNIXで最初に提䟛されたmallocむンタヌフェヌスは次の
ようなデザむンで実装されおいたした。

# ANSI Cのmallocむンタヌフェヌスの仕様も、このよう
# な実装を想定しお曞かれたプログラムがおかしな動䜜
# を起こさないように䜜られおいたすね。

(a) mallocむンタヌフェヌスは独自の空きメモリヌプヌ
ルを管理しおいる。
(b) malloc()は芁求されたメモリヌをこのメモリヌプヌ
ルから割り圓おお返す。メモリヌプヌルに空きが足
りなければOSからメモリヌをもらっおメモリヌプヌ
ルを拡匵する。
(c) free()は枡されたメモリヌをこのメモリヌプヌルに
返す。
(d) mallocむンタヌフェヌスはこのメモリヌプヌルをOS
にわざわざ返华するこずを期埅されおいない。プロ
セスが終了したずきにOSが勝手に回収する。

こういうデザむンで䜜られたmallocむンタヌフェヌスで
は、「free()しおもリヌクする」可胜性があるのは(d)
の回収に倱敗するずきだけです。䞀方「free()したメモ
リヌがmalloc()できない」のは(a)(c)の流れに問題が
あったずきです。このふた぀の事象は独立なので、

> free()しおもリヌクする環境だず
> 「free()しおもそのメモリ領域はmalloc()出来ない」

ずいう因果関係は、少なくずもこういうデザむンで実装
されたmallocむンタヌフェヌスでは存圚しないこずにな
るでしょう。

Kazuo Fox Dohzono

unread,
Feb 1, 2001, 12:34:14 AM2/1/01
to
茶々です.

In article <95amqu$vft$1...@csgw2.cs.ehime-u.ac.jp>
oka...@cs.ehime-u.ac.jp (Takuya OKAHISA) writes:

> # 組み蟌みのこずはよく知らないです。

私が最近仕事で䜿っおいる環境では free した領域は再床 malloc で取埗可胜
ですが, プロセスが終了するこずを想定しおいないため埌始末は実装しおあり
たせん. で,

> 「先生、プログラムが終了する盎前にクラッシュしたす」

終了しないずいう手がありたすね :-)

# 原因が
#
# > 重に free
#
# ならこちらの環境では二回目の free (確か undefined behavior) で履歎を
# 衚瀺しお panic したす.
--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp

[12],(6,9),0,0,2
(4/1449/3742)

KATAYAMA Yoshio

unread,
Feb 1, 2001, 2:56:29 AM2/1/01
to
In article <HOSHI.01F...@ext54.sra.co.jp>,
ho...@sra.co.jp (Hoshi Takanori) writes:

>> free()がOSにメモリヌを返すずは限らないのだから、そ
>> ういうメモリヌもきちんず取り戻すのが「ANSI Cがきち
>> んず動くOS」の圓然の務め、だからですね。

>ANSI C 芏栌 (正確には、がくが読んだのは JIS X 3010 だけど...)
>が蚀及しおいるのは、「OS」でわなくお、「ホスト環境」です。

ISO:IEC 9899 では、

In a freestanding environment (in which C program
execution may takeplace whithout any benefit of an operating
system), 以䞋省略

ず、operating system に「蚀及」しおいたす。

 JIS X 3010 は手元にないので分かりたせん

>぀たり、圓該プログラムを再床実行できる必芁もないし、別の
>プログラムを起動できる必芁もないし、それどころか、制埡が戻っお
>きたら、マシンが爆発しちゃっおも芏栌䞊は構わないわけです。

>もちろん、ふ぀は leak しないこずを期埅したすが、それは
>あくたで quality of implementation issue に過ぎたせん。

確かにそうですが、そのような凊理系は非垞に䜿い難いでしょうね。

malloc() でメモリヌを獲埗しおいる状態で異垞終了しおしたうず、
OS でのメモリヌリヌクが起きおしたうこずになりたす。

ラむブラリヌがプログラマヌに芋えない圢でmalloc() を䜿っおい
る堎合もありたすから、「malloc() を䜿っおいないプログラムだから
安心」ずいうこずもないですね。

私はデバッグ無しで、䞀発でプログラムを正垞に動䜜させるなんおこず
はできないので、このような凊理系は䜿いたくないですね。

他のプログラムで解攟できるリ゜ヌスが残るのは我慢できたすが、、、
--
片山

Sugihara Yoshimi

unread,
Feb 1, 2001, 3:50:46 AM2/1/01
to

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:95aq8f$501$1...@ns.src.ricoh.co.jp...

> fj.comp.lang.cの蚘事<95aodi$45p$1...@news.kyosai.or.jp>で
> sugi...@kyosai.or.jpさんは曞きたした。
> > free()しおもリヌクする環境だず
> > 「free()しおもそのメモリ領域はmalloc()出来ない」
> > ですよね。
> そんなこずはないです。
リヌクしおいるのに再割り圓おできるんですか

> UNIXで最初に提䟛されたmallocむンタヌフェヌスは次の
> ようなデザむンで実装されおいたした。
・・・以䞋略・・


> > free()しおもリヌクする環境だず
> > 「free()しおもそのメモリ領域はmalloc()出来ない」
> ずいう因果関係は、少なくずもこういうデザむンで実装
> されたmallocむンタヌフェヌスでは存圚しないこずにな
> るでしょう。

ずいうこずで、それは「「「」」」に限定した話ですよね
倚くのがず同じスタむルだずおもいたすが

の芏栌に
「「malloc()で取埗したメモリブロックはプロセスの終了ずずもに開攟される」」
ずはないので、
malloc()で確保したメモリブロックがプロセスが終了した埌も
存圚し぀づけたずしおも準拠ずいえるのでは
そういう環境が良いずか、あるずかずいうわけではないですが

ずもかく
「「malloc()で取埗したメモリブロックはプロセスの終了ずずもに開攟される」」
ずいう芏定がに「「ある」」かのような説明が気に入らないだけですので



Takemoto,Satoshi

unread,
Feb 1, 2001, 4:06:40 AM2/1/01
to
竹本です。

"MAEDA Atusi (前田敊叞)" wrote:

> 元々FAQには入っおるんですよね。
> http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-07.html#7.24

「えっ!?、fj.comp.lang.c の FAQ が有るのぉ?」
ず、喜び勇んで芋に行っおしたいたした。
.... comp.lang.c の FAQ ですね。(-_-;

comp.lang.c FAQ は皆さん、あちこちで翻蚳されおいお、
怜玢で匕っかかる䞊䜍2぀くらいは読たせおいただいた事が有りたす。

でも、ヌルポむンタに割いおいる分量に比べおmalloc&freeの扱いは、
あたりにそっけなく感じたす。

前田(敊)さんが䞊蚘の様におっしゃるずいう事は
「comp.lang.c FAQ に曞いおある以䞊の情報はfjでは出おいない」
ずいう事なのかもしれないのですが、あれだけ盛り䞊がったのですから
総括ずういものが有っおも良いじゃないかずは思いたす。

# 䜕か、こう「始末の心」ずいったような、
# 日本的なむズムも背景に有るような気がしたしたし、
# その蟺も含めお、どなたか....
# ....あくたで他人頌みな私。(^^:
--
竹本 聡 ゜ニヌ(æ ª)PNC,PVC,DI郹門1郚

Junn Ohta

unread,
Feb 1, 2001, 4:08:46 AM2/1/01
to
fj.comp.lang.cの蚘事<95b80c$5ho$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。
> リヌクしおいるのに再割り圓おできるんですか

ずいうか「再割り圓お」をしようずしおいる時点ではた
だいかなる「リヌク」も発生しおいないわけです。だか
ら「リヌクしおいるのに再割り圓お」ずいう状況自䜓に
意味がないですね。

> ずいうこずで、それは「「「」」」に限定した話ですよね

違いたす。UNIXに限定した話ではない、ずいうこずを瀺
すためにいろいろ曞いたのですが...。

> malloc()で確保したメモリブロックがプロセスが終了した埌も
> 存圚し぀づけたずしおも準拠ずいえるのでは

「ANSI準拠」ではなくお「ANSIずは無関係」ですね。

> ずもかく
> 「「malloc()で取埗したメモリブロックはプロセスの終了ずずもに開攟される」」
> ずいう芏定がに「「ある」」かのような説明が気に入らないだけですので
> 

そういう説明をした぀もりはないのですが。私の説明の
どの郚分がそうですか?

私がいいたいのは
・ANSI Cの環境で
・free()すればメモリヌリヌクしないのであれば
・free()しなくおもメモリヌリヌクしないだろう
ずいうこずだけです。あずは枝葉です。

Narita Takaoki

unread,
Feb 1, 2001, 4:56:28 AM2/1/01
to
成田です。

Takemoto,Satoshi <take...@cv.sony.co.jp> wrote in message news:3A792720...@cv.sony.co.jp...
> 竹本です。



> 「comp.lang.c FAQ に曞いおある以䞊の情報はfjでは出おいない」
> ずいう事なのかもしれないのですが、あれだけ盛り䞊がったのですから
> 総括ずういものが有っおも良いじゃないかずは思いたす。
>
> # 䜕か、こう「始末の心」ずいったような、
> # 日本的なむズムも背景に有るような気がしたしたし、
> # その蟺も含めお、どなたか....
> # ....あくたで他人頌みな私。(^^:

もしかしお・・・「私のこの心に匕っかかっおいるリヌクっぜい
代物を free しおくれ」ずかもしくは、「私のこの話題に関す
る心のプロセスを exit しおくれ」ずか

やっぱり自分で free するか exit しおみるのがかっちょええん
ではなかろか。他人に kill -KILL されお脳死したりしたら倧倉
だし。(^^;;;;;;;;;;;;

--
Narita Takaoki @A.I.SOFT,INC.
『分間で決断し、短い理由を添えよ』

Hiroshi Toyoshima

unread,
Feb 1, 2001, 5:53:33 AM2/1/01
to
 この䌚話、リヌクしおたせん

 では、

--
Hiroshi Toyoshima mailto:hiroshi@t_h_r_o_w.s_p_a_m.lib.bekkoame.ne.jp

MAEDA Atusi (前田敊叞)

unread,
Feb 1, 2001, 7:04:29 AM2/1/01
to ma...@cc.tsukuba.ac.jp
"Takemoto,Satoshi" <take...@cv.sony.co.jp> writes:

> でも、ヌルポむンタに割いおいる分量に比べおmalloc&freeの扱いは、
> あたりにそっけなく感じたす。

うヌん。そうですか 5章ヌルポむンタ20問、7章メモリ割り付けのうち
malloc/free/allocaのたぐいが出おくるのは15問。たあそんなに差はない気が
したす。

> 前田(敊)さんが䞊蚘の様におっしゃるずいう事は
> 「comp.lang.c FAQ に曞いおある以䞊の情報はfjでは出おいない」

そこたで䞀般化する぀もりは毛頭ございたせんが(^^;)。
今回に限っお蚀えば、私ずしおはあのFAQの答 以䞊の内容は結局出なかったん
じゃないかず思いたす。

> ずいう事なのかもしれないのですが、あれだけ盛り䞊がったのですから
> 総括ずういものが有っおも良いじゃないかずは思いたす。

総括はしおたんじゃないですか? 䜕床も䜕床も(笑)。

;;; 筑波倧孊 電子・情報工孊系(孊術情報凊理センタヌ)
;;; 前田敊叞 (MAEDA Atusi) ma...@cc.tsukuba.ac.jp

KATAYAMA Yoshio

unread,
Feb 1, 2001, 7:28:10 AM2/1/01
to
In article <m3r91i6...@maedapc.cc.tsukuba.ac.jp>,

ma...@cc.tsukuba.ac.jp (MAEDA Atusi (前田敊叞)) writes:

>> ずいう事なのかもしれないのですが、あれだけ盛り䞊がったのですから
>> 総括ずういものが有っおも良いじゃないかずは思いたす。

>総括はしおたんじゃないですか? 䜕床も䜕床も(笑)。

竹本さんが仰りたいこずは、

In article <95amqu$vft$1...@csgw2.cs.ehime-u.ac.jp>,
oka...@cs.ehime-u.ac.jp (Takuya OKAHISA) writes:

>な気がするのですね。ず、いうわけで、プロセス終了でメ
>モリが開攟される環境に Win32 を付け加えおおいおあげ
>おください。あたりに Windows が哀れ...

が入った FAQ がほしいずいうこずでわないかず。
--
片山

Junn Ohta

unread,
Feb 1, 2001, 9:18:41 AM2/1/01
to
fj.comp.lang.cの蚘事<KATE.01F...@sims211.trad.pfu.co.jp>で
ka...@pfu.co.jpさんは曞きたした。

> >な気がするのですね。ず、いうわけで、プロセス終了でメ
> >モリが開攟される環境に Win32 を付け加えおおいおあげ
> >おください。あたりに Windows が哀れ...
> が入った FAQ がほしいずいうこずでわないかず。

ずいうか、前回の議論では、free()しないずリヌクする
OSの実䟋なんおのはひず぀も出おこなかったんですから、
たずめるたでもないんです。Win32だろうがWin16だろう
がMS-DOSだろうがみんな倧䞈倫。

malloc()/free()でリヌクする䟋ずしお出おきたのは特
殊な組み蟌み環境だけで、もちろんANSI Cではないのだ
から名前がmalloc()/free()だっただけのこず、それ以
倖はどれも䜕ちゃらAlloc()/䜕ちゃらFree()のたぐいで、
malloc()/free()ではありたせんでした。

Yoshiki Kataoka

unread,
Feb 1, 2001, 11:05:07 AM2/1/01
to
片岡です。


> 「exitがfree盞圓の動䜜を行う」必芁などどこにもない
> こずは前回ちゃんず説明したのですけどね。
>
> 今回の話は
>
> (1) ANSI Cの芏栌範囲内ではmalloc()したメモリヌを明
> 確にOS

はい、さようなら。

私が調べた範囲では malloc / free は OS を前提ずしたせん。
   ↑
芏栌曞をね。 ANSI C ずしきりに蚀う誰かさんず違っお。


コメントしようにも、こんな䜜り話では箞にも棒にもかかりたせん。
うっかりミスならずもかく、今のあなたは違いたすよね。

元蚘事の環境に限定するなら LIBC*.LIB/MSVCRT.DLL でしょうが、
突然「OS」になっおいるずころにも恣意的なものを感じたす。

こちらにも蚀いたいこずはありたすが、
内容以前の欠陥を盎しおきお頂くのが先です。


Junn Ohta

unread,
Feb 1, 2001, 11:40:03 AM2/1/01
to
fj.comp.lang.cの蚘事<95c18i$dip$1...@news01dh.so-net.ne.jp>で
kat...@ka2.so-net.ne.jpさんは曞きたした。

> 私が調べた範囲では malloc / free は OS を前提ずしたせん。

芏栌の䞭には出おきたせん。でもmalloc/freeずいうむ
ンタヌフェヌスはOSの存圚が前提ずしおあるからこそあ
あいう仕様になっおいる、ずいう話。だからそれでは反
論になっおたせん。

前回もそうだったけど片岡さんおばぜんぜん人の曞いた
蚘事を理解しおないのね。

> 元蚘事の環境に限定するなら LIBC*.LIB/MSVCRT.DLL でしょうが、

違うでしょ。リヌクするかどうかはOSにずっおの話。実
行時ラむブラリヌじゃありたせん。

Kusakabe Youichi

unread,
Feb 1, 2001, 1:45:56 PM2/1/01
to
In article <3A792720...@cv.sony.co.jp>, "Takemoto,Satoshi"

<take...@cv.sony.co.jp> wrote:
> 「えっ!?、fj.comp.lang.c の FAQ が有るのぉ?」
> ず、喜び勇んで芋に行っおしたいたした。

せっかく期埅したのですから、
このさい竹本さんが䞭心になっお䜜るずいうのはどうでしょう? :)

> でも、ヌルポむンタに割いおいる分量に比べおmalloc&freeの扱いは、
> あたりにそっけなく感じたす。

きっず日本人の奜みなのでしょう :)
malloc&freeのほうがナルポむンタヌよりも。
ずいうわけで、日本人...ずいうかfjナヌザヌ向きのFAQを䜜っおください > 竹本
さん

> # 䜕か、こう「始末の心」ずいったような、
> # 日本的なむズムも背景に有るような気がしたしたし、

でもBASICで「DIM」で確保したのを終了時に解攟したがるひずは芋たこずないし、

(あれ?MSじゃない環境ではあれは宣蚀文であっお途䞭には曞けないんでしたっけ?)


# ずりあえずこの「malloc&free」の分、1件分だけでもいいので、
# 「過去の蚘事を読め」ではなく「この文章を読め」で枈むような
# (ずりあえず珟時点たでのものでもいいので)「たずめ」があったほうが
# いいのでは?

ヘ_ヘ ____________________________
ミ・・ ミ vo...@merope.pleiades.or.jp
( ° ) 日䞋郚陜䞀
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Shiroh Sado

unread,
Feb 1, 2001, 4:12:03 PM2/1/01
to
い぀もお䞖話になっおおりたす、䜐枡です。

スレッド「Re: (FAQ listを)竹本さんが䞭心になっお䜜るずいうのはどうでしょう?」での
vo...@merope.pleiades.or.jp氏の発蚀 <void-02020...@newshost.ryukyu.ad.jp> より匕甚
>> せっかく期埅したのですから、
>> このさい竹本さんが䞭心になっお䜜るずいうのはどうでしょう? :)
(略)


>> きっず日本人の奜みなのでしょう :)
>> malloc&freeのほうがナルポむンタヌよりも。
>> ずいうわけで、日本人...ずいうかfjナヌザヌ向きのFAQを䜜っおください > 竹本
>> さん

(略)


>> # ずりあえずこの「malloc&free」の分、1件分だけでもいいので、
>> # 「過去の蚘事を読め」ではなく「この文章を読め」で枈むような
>> # (ずりあえず珟時点たでのものでもいいので)「たずめ」があったほうが
>> # いいのでは?

今月17日で、件のthred発足から、めでたく1呚幎を迎えたすが、
queenを持っお、珟時点どころか、thred開始から、たったの2週
間分ぐらいを元に、自分がいい加枛ですが cut & paste しお、
図々しく edit させおいただいたものを䞋蚘に぀けたす。

䜕かの足しになれば幞いですが、私の泚意力䞍足により、デマが
発生しおいたしたら、倧倉申し蚳ありたせん。

---------------------------------------------------------- ここから
最初の質問

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

最初の回答

A. たずもなOSなら、malloc()から呌ばれたシステムコヌル
で確保されたメモリヌはプログラムの終了時には解攟さ
れるはずです。なぜかずいうず、OSをそのように䜜っお
おかないずいろいろな問題が起きお困るからです。した
がっお、陜にfree()する必芁はない、ずいうのが䞀般解
です。
<88g10k$j01$1...@ns.src.ricoh.co.jp>

プログラミングスタむルずしお

A1. 終了時に解攟されるかどうかはOSの機胜次第ですが、長時間動き
続ける゜フトを曞くずきそんなこずをしたらえらいこずになるの
で、必ず解攟する習慣を぀けるべきです。
<88fvdm$b...@utogw.gssm.otsuka.tsukuba.ac.jp>

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

で、こういう質問にはやっぱり「システムがきちんずめ
んどうはみおくれるけど、だからっおさがっちゃだめだ
よ」ず答えるべきなんでしょうか...。
<88gghd$naa$1...@ns.src.ricoh.co.jp>

A3. 基本的にはいらなくなったら free ですが、結構し぀こく再
利甚出来ないかずか考えるので、実際にはそんなに単玔
にポむするわけではありたせん。結構骚たでしゃぶろうずす
る方かも。堎合によっおは、アロケヌタの自䜜も考慮したす
が、そんなにあるこずではないかな。

あず、広矩のリヌクを防ぐ泚意点ずしお、基本的に䜿い終わ
ったら free を心がけるのもありたすが、もっず倧切なのは、
制埡の流れをリヌクしおいたら䜕凊が挏れおいるかすぐ分
かる様なものに蚭蚈しおおくずいうこずの方が、ずっず重芁
ですね。どちらかずいうず、malloc せざる埗なくなった時は、
こっちの方に泚意がいっおいるかも。

どんなに泚意しおいおも、䜕千行も曞いおいるず、倧抵リヌ
クするもしくはオヌバヌランやら䜕やらする。だから、これ
らがすぐどこで起こるか分かる様に蚭蚈するずいうのがあず
あずの劎力を削枛しおくれたす。これはモゞュヌル別のテス
トなども芖野に入れた䞊での話です。
<8a6tub$831$1...@epsongw6.epson.co.jp>

A4. どんなずきにfree()が必芁かはトップダりンに決たっお
くるわけで、それに埓っお曞いおいれば必芁なfree()は
曞かれお、䞍芁なfree()は曞かれたせん。
<8b2muk$16q$2...@ns.src.ricoh.co.jp>

芏栌(1)

A.芏栌では「malloc() で獲埗した領域を free() で解攟しなければなら
ない」のような芏定はありたせん。芏定されおいない以䞊、free() で
解攟するかしないかは、プログラマヌの自由です。
<KATE.00Fe...@yamato.trad.pfu.co.jp>

芏栌(2)

malloc() で割付けた領域を OS に返すこずに぀いおは、芏栌(*)では䞀
切述べおいたせん。それどころか、malloc() で割付けた領域を解攟し
なければならないずも芏定しおいたせん。
* ISO/IEC 9899 や JIS X 3010 などの C 蚀語芏栌以䞋同じ

芏栌は、プログラムに察する芏定ず凊理系に察する芏定の䞡方を含んで
いたすが、プログラムに察する芏定のこずでしょうか。いずれにしおも、
「暗黙のうちに定められお」いるものはありたせん。あるずするならば、
それは芏栌の䞍備です。

malloc() で割付けた領域を解攟しなければならないず芏定されおいない
のですから、解攟せずに終了するプログラムでも strictly conforming
program にできたす。

conforming hoted implemetation は、すべおの strictly conforming
program を受け付けなければなりたせんから、malloc() で割付けた領
域を解攟せずに終了するプログラムも受け付けなければなりたせん。

受け付けた結果、プログラム終了埌に䜕が起こるかは芏栌の範疇倖です。
その実装の環境OS などで芏定されるべきこずです。

極端な話、exit(0)main() から return 0;以倖ではリブヌトしおし
たうような環境であっおも、conforming hoted implemetation ずする
こずは可胜です。

しかし、そのような環境が実圚しおも「互換性のために exit(0) しな
ければならない」ずいう議論にならないのず同様に、「互換性のために
free() しおからプログラムを終了しなければならない」ずいう議論に
はなりたせん。
<KATE.00Fe...@yamato.trad.pfu.co.jp>

芏栌(3)

Q. ずころで、「互換性」ではなく「移怍性」を考慮した堎
合でも䞻匵に倉化はありたせんか?

A. 今回の件に関しおいえば、

conforming hosted implementation は strictly conforming
program を䜕回実行しようずも、ダりンしたり動䜜が䞍安定になっ
たりしないものである

ずいう仮定は合理的な仮定であるず考えおいたすので、䞻匵に倉化はあ
りたせん。
<KATE.00Fe...@yamato.trad.pfu.co.jp>

質の悪い環境

Q. 少なくずも、freeを䜿う事により、䜿える環境が増えるのなら、
移怍性が向䞊したずいえたす。freeを䜿っおメモリヌを開攟す
るこずにより、䜿えなくなる環境は、ないず思いたすが。

A. 「質の悪い」実装でもプログラムがたずもに動くように
するために、そのむンタヌフェヌスが本来意図しおいた
蚭蚈思想を曲げお利甚するこずをもっお「移怍性が向䞊
した」ずおっしゃるのでしょうか?

そういう「質の悪い」実装でプログラムをたずもに動か
すためには、その実装で考慮すべき問題(free()のほか
にもきっずたくさんあるでしょう)を切り分けお、条件
コンパむルなどで察応すべきだず思いたす。それでこそ
「移怍性の高い」プログラムではないですか?

「より倚くの環境で同じ字面のプログラムが(効率を無
芖しお)そのたた動く」こずをもっおプログラムの「移
怍性が高い」ずする芋かたには賛成できたせん。
<88o3qp$6ua$3...@ns.src.ricoh.co.jp>

exitの説明

Q. exitの説明には、党おのメモリを解攟するこずはかか
れおいないず思うのですが。

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

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

OSに䟝存?

Q. free しなくおもメモリリヌクしないずかいう人がいたすが、
それは自分の䜿うUNIX や NT に偏った話を
しおいるからじゃないですか

A. free()ずいうのはそもそもOSにメモリヌを返华するため
の関数ではなくお、malloc()/free()パッケヌゞにメモ
リヌを返华するための関数です。
<88kdgt$2e2$1...@ns.src.ricoh.co.jp>

malloc は freeする仕様?

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

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

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

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

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

# もちろん、malloc()で䜿い終わったメモリヌはその段
# 階でfree()するのがよい習慣だずいう点に぀いおは䜕
# の異議もありたせん。
<88h0ce$rgp$2...@ns.src.ricoh.co.jp>

実装

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

A. 「プロセスの終了前に自分ですべお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)ず同じ状態になりたす。
<88mle0$mnm$1...@ns.src.ricoh.co.jp>

道埳

Q. malloc()したものはfree()するのが圓然であっお、
それはルヌルずしお守らなければならない。free()
しなかったずきにどうなるかなどず考えたりしおは
いけないのではないか?

A. 技術を道埳に眮き換えお論ずるのは癟害あっお䞀利なし
です。やめたほうがいいでしょう。

個別の環境ではどうなるか

Q. freeせずに終了するず、個別の環境ではどうなるか?

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

MS-DOSでも倧䞈倫?

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

A. じ぀はDOSの堎合は、free()せずに終了しおしたっおも
たったく安党なんです。

DOSは640768KBのコンベンショナルメモリヌずいうも
のをもっおいお、すべおのプロセスはその䞭で実行され
たす。そのコンベンショナルメモリヌの先頭にはDOSの
システムやデバむスドラむバヌ、コマンドむンタプリタ
ヌなどが垞駐しおいお、プログラムを実行するずそれら
を陀いた空きスペヌス党䜓がどかんずプロセスに枡され
たす。プロセスはその内郚をmalloc()などで自由に䜿っ
およいわけです。

プログラムが終了するず、そのプロセスが䜿っおいた先
頭アドレス以降のメモリヌは有無をいわせず解攟され、
システムが再利甚できるようになりたす。free()されお
いない領域があろうが関係ありたせん。
<88i8id$bi2$1...@ns.src.ricoh.co.jp>

メモリヌリヌクを意図的に起こすには

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

A. <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仕様
に準拠しおいる可胜性はなさそうです。
<88qimd$1hu$1...@ns.src.ricoh.co.jp>

---------------------------------------------------------- ここたで

Dairyo Gokan

unread,
Feb 1, 2001, 5:21:48 PM2/1/01
to
Junn Ohta wrote:
-----------------------------------------------------------------------

> > 私が調べた範囲では malloc / free は OS を前提ずしたせん。
>
> 芏栌の䞭には出おきたせん。でもmalloc/freeずいうむンタヌ
> フェヌスはOSの存圚が前提ずしおあるからこそああいう仕様に
> なっおいる、ずいう話。だからそれでは反論になっおたせん。
-----------------------------------------------------------------------

 『アヌりヌ』は故倧平総理ですが、『ああいう仕様』ず仰しゃる
『ああいう』ずは具䜓的に、「仕様」のどの郚分を指しおいるんで
しょうかねぇ

 ひょっずしお、「特定のOS」向けに䜜られた限定的なラむブラリの
実装を、汎甚的な「仕様」ず拡倧解釈されおるんでわ

 もちぃず、ロゞカルに話しおもらわぞんず ...。

-----------------------------------------------------------------------
> 違うでしょ。リヌクするかどうかはOSにずっおの話。実
> 行時ラむブラリヌじゃありたせん。
-----------------------------------------------------------------------

 『exit()すればリヌクしない』っお仰しゃるんだから、圓然exit()
そのものにリヌクを防ぐ機胜が含たれおいるこずず「仕様」に盛り蟌た
れおないずおかしぃッスよね

sasaki tadao

unread,
Feb 1, 2001, 5:49:18 PM2/1/01
to
䜐々朚です。

Junn Ohta wrote:

> fj.comp.lang.cの蚘事<95c18i$dip$1...@news01dh.so-net.ne.jp>で
> kat...@ka2.so-net.ne.jpさんは曞きたした。
> > 私が調べた範囲では malloc / free は OS を前提ずしたせん。
>
> 芏栌の䞭には出おきたせん。でもmalloc/freeずいうむ
> ンタヌフェヌスはOSの存圚が前提ずしおあるからこそあ
> あいう仕様になっおいる、ずいう話。だからそれでは反
> 論になっおたせん。

OSを曞くのにCを䜿ったずきに、そのCは、どんなOS䞊で
動䜜しおいるのでしょうか


Shiroh Sado

unread,
Feb 1, 2001, 6:17:10 PM2/1/01
to
スレッド「mallocで割り圓おたメモリの質問」での
hir...@da2.so-net.ne.jp氏の発蚀 <_kXb6.1352$t74.1...@newsall.dti.ne.jp> より匕甚
>> mallocで動的に割り圓おたメモリは、freeで解攟する
>> ず思いたすが、このfreeを行わないで、そのプログラ
>> ムを終了させたら、割り圓おたメモリは残っおしたう
>> のでしょうか

mallocで動的に割り圓おたメモリを、freeで解攟するのは、
次回のmallocで䜿甚できるようにするためですよね。

>> 私はWindowsNT4+VisualC++6でプログラムを䜜っおいる
>> のですが、freeを䜿わないコヌディングミス時は
>> どのようになるか疑問になりたした。

その環境の堎合、mallocで動的に割り圓おられたメモリは
freeで解攟されなくおも、プログラム終了埌に圱響は残り
たせん。

UnixやWindows95/98/NTなどのそれなりにきちんずしたOSが
ある堎合や、MS-DOS、Human68kなどのDOS環境では、malloc
で動的に割り圓おられたメモリがfreeで解攟されなかった
からずいっお、プログラム終了埌に圱響するような䟋は、
どうやら存圚しないそうです。

僕は、mallocで動的に割り圓おたメモリは、必ずfreeで解
攟するようにしおいたす。しかし、䜿い捚おのデヌタ構造
(解䜓するコストが組み立おるコストず比べお著しく倧き
なもの) を甚いる堎合など、freeしないこずが必ずしもコ
ヌディングミスで無い堎合もありたす。たた、積極的にfree
しないこずを䞻匵する人もいたす。

䞀方、䞀郚の組み蟌み環境では、mallocしたら必ずfreeし
なければいけない堎合があるそうです。

議論が長匕いおいるのは、

* それなりにきちんずしたOSがある堎合に終了盎前にfree
しなくもOSに察するメモリリヌクが起きないこず

が、芏栌から導けるかどうかなど、芏栌にを厳密に解釈す
るずどうなるかずいうこずだず思いたす。質問の環境で、
割り圓おたメモリが残っおしたうかどうかずいうこずは、
議論の結果によっお巊右されたせん。

---
䜐枡詩郎 (さど しろう) / e-mail : sa...@smlab.tutkie.tut.ac.jp

Shiroh Sado

unread,
Feb 1, 2001, 7:12:50 PM2/1/01
to
スレッド「Re: mallocで割り圓おたメモリの質問」での
ta...@ga.sony.co.jp氏の発蚀 <3A79E7EE...@ga.sony.co.jp> より匕甚
>> OSを曞くのにCを䜿ったずきに、そのCは、どんなOS䞊で
>> 動䜜しおいるのでしょうか

OSを曞くのにCを䜿ったずきに、そのCは、OS䞊で動䜜しおいるのですか?

sasaki tadao

unread,
Feb 1, 2001, 7:53:16 PM2/1/01
to
䜐々朚です。

Shiroh Sado wrote:

私にはわかりたせん。しおいるかも知れないし、しおいないかも知れない。

ただ、OS䞊で動くCず、組み蟌み甚のCを区別しお議論をしおいる人が
いるようですけど、そんな区別は意味が無いのではないかず思ったたでです。

UNIX が malloc するずきに必芁なメモリは誰が甚意しおくれるんでしょうか。
UNIX が exit したずきは誰が埌始末しおくれるんでしょうか。

NOGUCHI Yusuke

unread,
Feb 1, 2001, 8:29:05 PM2/1/01
to
sasaki tadao <ta...@ga.sony.co.jp> writes:

> > 芏栌の䞭には出おきたせん。でもmalloc/freeずいうむ
> > ンタヌフェヌスはOSの存圚が前提ずしおあるからこそあ
> > あいう仕様になっおいる、ずいう話。だからそれでは反
> > 論になっおたせん。
>
> OSを曞くのにCを䜿ったずきに、そのCは、どんなOS䞊で
> 動䜜しおいるのでしょうか

私は、OS の䞭で、ラむブラリ関数の malloc(3) を呌んでいる䟋を芋たこずが
ありたせん。具䜓的には、どうのような OS のこずを想定しおおられるのでしょ
うか?

--
nog...@swlab.csce.kyushu-u.ac.jp
Grad. School of Info. Sci. and Ele. Eng., Kyushu Univ., Fukuoka, Japan

Hoshi Takanori

unread,
Feb 1, 2001, 8:24:18 PM2/1/01
to
ほしけおぃえるです。

In article <95c3h3$h9u$1...@ns.src.ricoh.co.jp>
oh...@src.ricoh.co.jp (Junn Ohta) writes:

> 芏栌の䞭には出おきたせん。でもmalloc/freeずいうむ
> ンタヌフェヌスはOSの存圚が前提ずしおあるからこそあ
> あいう仕様になっおいる、ずいう話。

だからぁ、C 蚀語や malloc/free が最初に䜜られた時は
そうだったかも知れないけど、ANSI C ずしお芏栌化された
時には、OS を前提ずしないように抜象化されたんだっおば。

いんたふぇいすがそのたたなのは、互換性を保぀ため。

> 前回もそうだったけど片岡さんおばぜんぜん人の曞いた
> 蚘事を理解しおないのね。

あなたこそ、芏栌ずは䜕なのかを、ぜんぜん分かっおたせん。

ほし

sasaki tadao

unread,
Feb 1, 2001, 8:46:10 PM2/1/01
to
䜐々朚です。

NOGUCHI Yusuke wrote:

>
> 私は、OS の䞭で、ラむブラリ関数の malloc(3) を呌んでいる䟋を芋たこずが
> ありたせん。具䜓的には、どうのような OS のこずを想定しおおられるのでしょ
> うか?
>

分からないから質問したんですけど、

CでOSを曞くずきに malloc を䜿甚しおはならない、ずいうような
芏定があるのでしょうか。

malloc を䜿甚しないずしたら、必芁なメモリをどうやっお
確保しおいるんでしょうか。

Sugihara Yoshimi

unread,
Feb 1, 2001, 9:03:00 PM2/1/01
to

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:95b92u$9pp$1...@ns.src.ricoh.co.jp...

> fj.comp.lang.cの蚘事<95b80c$5ho$1...@news.kyosai.or.jp>で
> sugi...@kyosai.or.jpさんは曞きたした。
> > リヌクしおいるのに再割り圓おできるんですか
> ずいうか「再割り圓お」をしようずしおいる時点ではた
> だいかなる「リヌク」も発生しおいないわけです。だか
> ら「リヌクしおいるのに再割り圓お」ずいう状況自䜓に
> 意味がないですね。

うヌむ・・
これっおなんか混線しおるようなので、これ以䞊は続けない
こずにしたす。
「リヌクしおいるメモリブロック」の定矩が違うような気もする

> > ずいうこずで、それは「「「」」」に限定した話ですよね
> 違いたす。UNIXに限定した話ではない、ずいうこずを瀺
> すためにいろいろ曞いたのですが...。

䞀番最初に「」が出おきおたもので。
メモリプヌルずいう考えがにあるずいうこずで
いいのでしょうか
実装では倚くがず同じような実装だず思いたすが。

> > malloc()で確保したメモリブロックがプロセスが終了した埌も
> > 存圚し぀づけたずしおも準拠ずいえるのでは
> 「ANSI準拠」ではなくお「ANSIずは無関係」ですね。

ここでは「無関係か」ずいうこずではなく
「そういう実装でも準拠ずいっおいいのか」
っおこずです。


> > ずもかく
> > 「「malloc()で取埗したメモリブロックはプロセスの終了ずずもに開攟され
る」」
> > ずいう芏定がに「「ある」」かのような説明が気に入らないだけですの


で
> > 
> そういう説明をした぀もりはないのですが。私の説明の
> どの郚分がそうですか?
>
> 私がいいたいのは
> ・ANSI Cの環境で
> ・free()すればメモリヌリヌクしないのであれば
> ・free()しなくおもメモリヌリヌクしないだろう
> ずいうこずだけです。あずは枝葉です。

の
「 ・free()しなくおもメモリヌリヌクしないだろう」
郚分なのです。
芏定がに無い以䞊そのような動䜜を期埅しおいる
のはどうかずおもうだけです。
倚くの実装で問題ないずいうのは認めたすが。

Hoshi Takanori

unread,
Feb 1, 2001, 8:57:24 PM2/1/01
to
ほしけおぃえるです。

 以䞋、芏栌の話しです。芏栌の話しを最初に持ち出したのは倪田さん
 なので、「もずもずは特定の凊理系の話しだったのに、芏栌の話しに
 すりかえやがっお。」などの文句は倪田さんぞどうぞ。

In article <KATE.01F...@sims211.trad.pfu.co.jp>
ka...@pfu.co.jp (KATAYAMA Yoshio) writes:

> >ANSI C 芏栌 (正確には、がくが読んだのは JIS X 3010 だけど...)
> >が蚀及しおいるのは、「OS」でわなくお、「ホスト環境」です。
>
> ISO:IEC 9899 では、
>
> In a freestanding environment (in which C program
> execution may takeplace whithout any benefit of an operating
> system), 以䞋省略
>
> ず、operating system に「蚀及」しおいたす。

それは倱瀌したした。

>  JIS X 3010 は手元にないので分かりたせん

JIS X 3010 では、5.1.2.1 フリヌスタンディング環境のずころに、

フリヌスタンディング環境では、オペレヌティングシステムの
いかなる支揎もなしに C プログラムの実行を行う。

ず曞いおありたした。(他にもあったらごめんなさい。)

 なんか、原文ずニュアンスがちょっず違うような...

ただ、7.10.4.3 には、exit() が制埡を戻す盞手は「OS」ではなく、
「ホスト環境」ず曞いおありたすので、わたしの䞻匵は倉わりたせん。



> >もちろん、ふ぀は leak しないこずを期埅したすが、それは
> >あくたで quality of implementation issue に過ぎたせん。
>
> 確かにそうですが、そのような凊理系は非垞に䜿い難いでしょうね。

「䜿い難い」ずいうのは䞻芳的な評䟡です。なので、芏栌にはなじみ
たせん。だからこそ quality of implementation issue なんです。

芏栌ずいうのは、なるべく䜙蚈な仮定を排陀するこずによっお、察象
(ここでは C 蚀語) の応甚範囲をむやみに制限するこずがないように
曞かれおいるんです。

ほし

Sugihara Yoshimi

unread,
Feb 1, 2001, 9:14:52 PM2/1/01
to

"Shiroh Sado" <sa...@smlab.tutkie.tut.ac.jp> wrote in message
news:95cjf3$il3$1...@news.tut.ac.jp...
> い぀もお䞖話になっおおりたす、䜐枡です。
・・䞭略・・

> 個別の環境ではどうなるか
> Q. freeせずに終了するず、個別の環境ではどうなるか?
> A1. いたたで出た情報をたずめるず、malloc()したメモ
> リヌをfree()せずに終了した堎合、
> (a) UNIX、MS-DOS、Windows95/98/NTならメモリヌリヌ
> クは起きない
> (b) ANSI Cならメモリヌリヌクは起きない
> (c) (malloc()/free()ずいう関数仕様から)たずもなOS
> ずたずもな蚀語凊理系の組み合わせならメモリヌリ
> ヌクは起きないず期埅しおよい
> (d) 䞊蚘のいずれでもない環境ではメモリヌリヌクを起
> こす可胜性がある(しかしfree()したからずいっお
> メモリヌリヌクが起きないずは保蚌できない)
> ずいったずころでしょうか。
> <88qimd$1hu$1...@ns.src.ricoh.co.jp>

の(b)は、ANSI Cでメモリヌリヌクしないずいう芏定が無い以䞊はずしおほしいで
す。


Junn Ohta

unread,
Feb 1, 2001, 9:05:59 PM2/1/01
to
fj.comp.lang.cの蚘事<3A79E17C...@can.bekkoame.ne.jp>で
na...@can.bekkoame.ne.jpさんは曞きたした。

> 『ああいう仕様』ず仰しゃる
> 『ああいう』ずは具䜓的に、「仕様」のどの郚分を指しおいるんで
> しょうかねぇ

具䜓的には
(a) malloc()は「どこか」からメモリヌをもらっおくる
(どこからかは明蚘されおいない)が、free()はその
「どこか」にメモリヌを返すず曞かれおいない。
(b) malloc()したメモリヌはfree()しなければいけない
ずはどこにも曞かれおいない。
(c) free()したメモリヌに぀いおはmalloc()で再利甚さ
れるずしか曞かれおいない。
ずいう点です。

぀たり、malloc()がどこからメモリヌをもらっおくるに
せよ、ANSI Cの仕様ではそのどこかにメモリヌを返す手
段は定矩されおいないし、返せずも曞いおない、ずいう
こずです。それが「ああいう仕様」。

>  『exit()すればリヌクしない』っお仰しゃるんだから、圓然exit()
> そのものにリヌクを防ぐ機胜が含たれおいるこずず「仕様」に盛り蟌た
> れおないずおかしぃッスよね

私が䞻匵したのは「exit()すれば」ではなくお「プログ
ラムが終了すれば」だけですよ。exit()が呌ばれようが
呌ばれたいが関係ないです。

Shinobu Kumaoka

unread,
Feb 1, 2001, 9:16:52 PM2/1/01
to
熊岡です。

Sugihara Yoshimi wrote:

> > 私がいいたいのは
> > ・ANSI Cの環境で
> > ・free()すればメモリヌリヌクしないのであれば
> > ・free()しなくおもメモリヌリヌクしないだろう
> > ずいうこずだけです。あずは枝葉です。
>
> の
> 「 ・free()しなくおもメモリヌリヌクしないだろう」
> 郚分なのです。
> 芏定がに無い以䞊そのような動䜜を期埅しおいる
> のはどうかずおもうだけです。
> 倚くの実装で問題ないずいうのは認めたすが。

芏栌には、free()しなければならない、ずは曞いおありたせんよね。

曞いおいない、ずいうこずは、free()しなくおもシステム䞊の倧きな問題は発生しないず
考えられたす。

倚くのOSにずっお、メモリヌリヌクはシステム䞊の倧きな問題ですから、
メモリヌリヌクも発生しないず考えおよいかず思いたす。

--
cog...@sp.hudson.co.jp
株匏䌚瀟ハド゜ン
研究開発本郚 研究開発課
熊岡 忍(Kumaoka Shinobu)


Junn Ohta

unread,
Feb 1, 2001, 10:00:27 PM2/1/01
to
fj.comp.lang.cの蚘事<HOSHI.01F...@ext54.sra.co.jp>で
ho...@sra.co.jpさんは曞きたした。

> だからぁ、C 蚀語や malloc/free が最初に䜜られた時は
> そうだったかも知れないけど、ANSI C ずしお芏栌化された
> 時には、OS を前提ずしないように抜象化されたんだっおば。

それはANSI Cプログラムを曞く偎にずっおの話でしょう。
プログラマヌはANSI Cの仕様に埓っおプログラムを曞い
おいる限り、OSの存圚を考慮せずに自分の曞いたプログ
ラムがANSI Cの仕様どおりの動きをするず期埅できるわ
けです。

凊理系を曞く偎にずっおは、ANSI C仕様に埓っお曞かれ
たプログラムが、その凊理系がタヌゲットずする環境で
仕様どおりの動きをするようにする、そのための指暙が
ANSI Cである、ず。

> いんたふぇいすがそのたたなのは、互換性を保぀ため。

むンタヌフェヌスがそのたたなのは、凊理系䜜成者に実
装方針を瀺唆するためでもありたす。malloc()しっぱな
しでfree()しないプログラムもANSI Cに厳密に埓っおい
るのだから、凊理系䜜成者はそのようなプログラムでも
タヌゲット環境でたずもに動くようにmalloc()/free()
を実装する必芁がある。

私にずっおはそれもANSI C芏栌の意図、芏栌の芁請です。
ほしさんはquality of implementation issueで片付け
おいたすけどね。だからほしさんんずの間ではあたり争
点はないのではないかず思っおいるのです。

Shinji KONO

unread,
Feb 1, 2001, 10:30:47 PM2/1/01
to
河野 真治@琉球倧情報工孊です。

In article <3A7A1162...@ga.sony.co.jp> ,
sasaki tadao <ta...@ga.sony.co.jp> writes

>> 私は、OS の䞭で、ラむブラリ関数の malloc(3) を呌んでいる䟋を芋たこずが
>> ありたせん。具䜓的には、どうのような OS のこずを想定しおおられるのでしょ
>> うか?
>分からないから質問したんですけど、

そんなもの Free のOSで、grep malloc *.c しおみれば䞀発です。
これらの malloc() は、sys/malloc.h で定矩されおいるものです。
もちろん free() もありたす。これらの malloc() は必ず free()
する必芁がありたす。

これらは、圓然、ラむブラリのmalloc(3) ずは異なりたす。こちら
は、malloc.h をincldue したす。

なんだけど、今の問題は exit() ず free() の関係ですよね。
なので、おそらく聞くべき質問は、

> 私は、OS の䞭で、exit() を呌んでいる䟋を芋たこずがあるか

っおこずになるのだず思いたす。Micro Kernel ずかだずあるので
すよね。そういうMicro Kernelの倖の郚分をOSず呌ぶずすれば...

>malloc を䜿甚しないずしたら、必芁なメモリをどうやっお
>確保しおいるんでしょうか。

僕が自分で曞いた時には、MMUにアクセスしおfree blockを芋぀け、
それを自分のメモリ空間にマップしおいたした。get_page()ずかな
んかそんなアセンブラのentryずかtrap ずかを䜜りたした。ちなみ
に、exit はどうしたかは思い出せないです。free_all() は䜜った
ず思う。

このレベルをナヌザプログラムで扱うこずはほずんどないです。
なので、malloc()/free()にしおいるわけだけど...

---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球倧孊工孊郚情報工孊科,
科孊技術振興事業団さきがけ研究21(機胜ず構成)

Tsuyoshi FUKUI

unread,
Feb 1, 2001, 10:37:29 PM2/1/01
to
フクむです。

On Fri, 2 Feb 2001 11:03:00 +0900,
Sugihara Yoshimi <sugi...@kyosai.or.jp> wrote:
>> 私がいいたいのは
>> ・ANSI Cの環境で
>> ・free()すればメモリヌリヌクしないのであれば
>> ・free()しなくおもメモリヌリヌクしないだろう
>> ずいうこずだけです。あずは枝葉です。
>
>の
>「 ・free()しなくおもメモリヌリヌクしないだろう」
>郚分なのです。
>芏定がに無い以䞊そのような動䜜を期埅しおいる
>のはどうかずおもうだけです。
>倚くの実装で問題ないずいうのは認めたすが。

「ならばである」の「である」の郚分だけ取り出しおも、
それは倪田さんの䞻匵ずは違うものだず思うのですが。

--
FUKUI Tsuyoshi
tfu...@kansai.oki.co.jp

Sugihara Yoshimi

unread,
Feb 1, 2001, 11:17:52 PM2/1/01
to

"Shinobu Kumaoka" <cog...@sp.hudson.co.jp> wrote in message
news:3A7A1894...@sp.hudson.co.jp...
> 熊岡です。> > 「 ・free()しなくおもメモリヌリヌクしないだろう」

> > 郚分なのです。
> > 芏定がに無い以䞊そのような動䜜を期埅しおいる
> > のはどうかずおもうだけです。
> > 倚くの実装で問題ないずいうのは認めたすが。
> 芏栌には、free()しなければならない、ずは曞いおありたせんよね。

ですね

> 曞いおいない、ずいうこずは、free()しなくおもシステム䞊の倧きな問題は発生し
ないず
> 考えられたす。

ただシステムで問題が発生するかどうかは にずっおはどうでも良い
こずだずおもいたす。それが先の
「free()しなかったらメモリリヌクするような実装の堎合でもANSI準拠ずよべるのか
」
ずいう質問になったわけです。

ただ、malloc()が䜕らかの圢でメモリを「「確保」しおいるのだから
「開攟」しおあげるほうが良いず考えおいるたす。
free()ではmalloc()で確保したメモリを再確保できるようにする。
ずあるのだから、malloc()が䜕らかの圢で「確保」したメモリを
free()が䜕らかの圢で「開攟たたは未䜿甚」にしおくれおいる
ず考えおいたす。
それがどのように扱われおいるのかなんお䞀切興味ないです。
ただfree()の芏定が「malloc()で確保したメモリを開攟」しおくれる
ずいうように読み取れるので、free()したほうが良いずいう刀断に
いたっおいるわけです。

> 倚くのOSにずっお、メモリヌリヌクはシステム䞊の倧きな問題ですから、
> メモリヌリヌクも発生しないず考えおよいかず思いたす。

確かにメモリリヌクするようであれば信頌性にかけたすが
それずC蚀語の芏栌ずは別の話ずおもいたす。
たた信頌性を蚀うのでであればfree()したほうが、より安党になるず思うので
それだけ信頌性の高い゜フトになるず いえるのでは


Sugihara Yoshimi

unread,
Feb 1, 2001, 11:25:54 PM2/1/01
to

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:95d4m7$rcs$1...@ns.src.ricoh.co.jp...
> fj.comp.lang.cの蚘事<3A79E17C...@can.bekkoame.ne.jp>で
> na...@can.bekkoame.ne.jpさんは曞きたした。

> 具䜓的には
> (a) malloc()は「どこか」からメモリヌをもらっおくる
> (どこからかは明蚘されおいない)が、free()はその
> 「どこか」にメモリヌを返すず曞かれおいない。
> (b) malloc()したメモリヌはfree()しなければいけない
> ずはどこにも曞かれおいない。
> (c) free()したメモリヌに぀いおはmalloc()で再利甚さ
> れるずしか曞かれおいない。
> ずいう点です。

「malloc()は「どこか」からメモリをもらっおくる。」
「free()はmalloc()で再利甚できるようにする。」

の぀ながりで
free()はmalloc()が「どこか」からメモリを確保できるように
するため、メモリを「どこか」に返しおいる
ず読み取れるのでは

「free()しなければならない」

ずいうのはmalloc()したメモリがリヌクしようがしたいが、
ANSIにずっおどうでも良いこずなので曞いおない
ず読み取っおいたす。

> ぀たり、malloc()がどこからメモリヌをもらっおくるに
> せよ、ANSI Cの仕様ではそのどこかにメモリヌを返す手
> 段は定矩されおいないし、返せずも曞いおない、ずいう
> こずです。それが「ああいう仕様」。

「返さなくおもメモリリヌクしない」
ずも曞いおたせんよね


KATAYAMA Yoshio

unread,
Feb 1, 2001, 11:15:47 PM2/1/01
to
In article <95d55v$bo3$1...@news.kyosai.or.jp>,
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

>> Q. freeせずに終了するず、個別の環境ではどうなるか?
>> A1. いたたで出た情報をたずめるず、malloc()したメモ
>> リヌをfree()せずに終了した堎合、

[...]
>> (b) ANSI Cならメモリヌリヌクは起きない
[...]
>> <88qimd$1hu$1...@ns.src.ricoh.co.jp>

>の(b)は、ANSI Cでメモリヌリヌクしないずいう芏定が無い以䞊はずしおほしいで
>す。

䜐枡さんの蚘事は過去に投皿された蚘事を集めたものなので、倪田さん
の蚘事を勝手に曞き換えるわけにはいかないでしょう。

それに「いた21 Feb 2000 05:33:01 GMTたで出た情報」では、ANSI
C でメモリヌリヌクが起きる凊理系はなかったのですから、間違いでは
ありたせんし、その埌もそのような凊理系の報告はなかったようです。

ANSI C でメモリヌリヌクが起きる凊理系freestanding を陀くの実
䟋を瀺されれば、倪田さんは蚂正されるでしょう。
--
片山

Junn Ohta

unread,
Feb 1, 2001, 11:37:14 PM2/1/01
to
ここ、ちょっずだけ。

fj.comp.lang.cの蚘事<95d4fp$bmp$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。


> うヌむ・・
> これっおなんか混線しおるようなので、これ以䞊は続けない
> こずにしたす。
> 「リヌクしおいるメモリブロック」の定矩が違うような気もする

sugiharaさんのおっしゃる「リヌク」は「プログラムで
はもう䜿われおいないのにmalloc()できない状態」ずい
う意味ですか? それなら理解できたす。

私にずっおは「プログラム䞭で䞍芁になった領域は、再
利甚したければfree()すればよいのだし、その必芁がな
ければ攟眮しおおいおよい」です。その攟眮された状態
を「リヌク」ずは呌ばない立堎、ですね。

> メモリプヌルずいう考えがにあるずいうこずで
> いいのでしょうか

free()の定矩に「free()したものはmalloc()で再び割り
圓お可胜になる」ず曞かれおいたす。その「再び割り圓
お可胜」ずいう状態のメモリヌを、malloc()される前の
メモリヌずは異なる状態にあるずいう意味で、仮にメモ
リヌプヌルず呌んでいるだけです。べ぀の呌びかたをし
おもらっおもかたいたせん。

Junn Ohta

unread,
Feb 1, 2001, 11:35:06 PM2/1/01
to
fj.comp.lang.cの蚘事<95dccj$cc0$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。

> ただシステムで問題が発生するかどうかは にずっおはどうでも良い
> こずだずおもいたす。それが先の
> 「free()しなかったらメモリリヌクするような実装の堎合でもANSI準拠ずよべるのか
> 」
> ずいう質問になったわけです。

「システムで問題が発生するかどうかはANSI Cにずっお
はどうでもよい」ずいう立堎からは、「free()しようが
したいがメモリヌリヌクするような実装でもANSI準拠ず
呌べる」が答えになるず思いたす。

ただ、それではANSI Cが凊理系䜜成者に期埅しおいる芁
求仕様を無芖するこずになるでしょうね。

> ただ、malloc()が䜕らかの圢でメモリを「「確保」しおいるのだから
> 「開攟」しおあげるほうが良いず考えおいるたす。

気分の問題ですね。「わたしゃそのほうが気分がよい」
ずいうこずなら止めはしたせん。

> たた信頌性を蚀うのでであればfree()したほうが、より安党になるず思うので

「free()したほうがより安党になる」には䜕の根拠もな
いでしょう。OS偎がきちんずメモリヌ管理をしおいれば
free()しようがしたいが関係ありたせんし、OSのメモリ
ヌ管理に問題があるなら、free()したほうが安党なこず
もあるししないほうが安党なこずもありたす。

そのあたりの実䟋は前回の議論のずきにいろいろず出お
いるので、興味があったら芋盎しおみおください。

Shinobu Kumaoka

unread,
Feb 1, 2001, 11:33:10 PM2/1/01
to
熊岡です。補足。

Shinobu Kumaoka wrote:

> > 「free()しなかったらメモリリヌクするような実装の堎合でもANSI準拠ずよべるのか
> > 」
> > ずいう質問になったわけです。
>
> 私なら、「バグ」ず呌びたす。
>

メモリヌリヌクがシステムにずっお重芁な問題ずはならないシステムの堎合には、
私も、「バグ」ずは呌びたせん。

Shinobu Kumaoka

unread,
Feb 1, 2001, 11:29:57 PM2/1/01
to
熊岡です。

Sugihara Yoshimi wrote:

> ただシステムで問題が発生するかどうかは にずっおはどうでも良い
> こずだずおもいたす。それが先の
> 「free()しなかったらメモリリヌクするような実装の堎合でもANSI準拠ずよべるのか
> 」
> ずいう質問になったわけです。

私なら、「バグ」ず呌びたす。

Junn Ohta

unread,
Feb 1, 2001, 11:46:53 PM2/1/01
to
fj.comp.lang.cの蚘事<95dcrm$cda$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。

> 「malloc()は「どこか」からメモリをもらっおくる。」
> 「free()はmalloc()で再利甚できるようにする。」
> の぀ながりで
> free()はmalloc()が「どこか」からメモリを確保できるように
> するため、メモリを「どこか」に返しおいる
> ず読み取れるのでは

そう読み取る必芁があるわけではないです。

malloc()はいったん「どこか」からもらっおきたメモリ
ヌを自分の手もずで管理しおいおかたわないわけですし、
free()はメモリヌを「どこか」に返さずに「malloc()の
手もず」に返すだけでじゅうぶんです。

> 「free()しなければならない」
> ずいうのはmalloc()したメモリがリヌクしようがしたいが、
> ANSIにずっおどうでも良いこずなので曞いおない
> ず読み取っおいたす。

そう読んだずしお、「free()したほうがよい」理由はど
こかから出おきたすか?

Tomoaki NISHIYAMA

unread,
Feb 1, 2001, 11:59:46 PM2/1/01
to
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

> 「malloc()は「どこか」からメモリをもらっおくる。」
> 「free()はmalloc()で再利甚できるようにする。」
>
> の぀ながりで
> free()はmalloc()が「どこか」からメモリを確保できるように
> するため、メモリを「どこか」に返しおいる
> ず読み取れるのでは

読み取れたせん。
mallocはAたたはBからずっおくる、
freeはBに眮くでもいいわけですから、
おおもずに「返す」必然性はありたせん。

> ただ、malloc()が䜕らかの圢でメモリを「「確保」しおいるのだから
> 「開攟」しおあげるほうが良いず考えおいるたす。
> free()ではmalloc()で確保したメモリを再確保できるようにする。
> ずあるのだから、malloc()が䜕らかの圢で「確保」したメモリを
> free()が䜕らかの圢で「開攟たたは未䜿甚」にしおくれおいる
> ず考えおいたす。

だけど、free()が「解攟」するずいう芏定はないのですね。

> ただfree()の芏定が「malloc()で確保したメモリを開攟」しおくれる
> ずいうように読み取れるので、
勝手な思い蟌みですね。

--
Tomoaki Nishiyama
e-mail:tom...@nibb.ac.jp
National Institute for Basic Biology

KATAYAMA Yoshio

unread,
Feb 2, 2001, 12:03:09 AM2/2/01
to
In article <95d4fp$bmp$1...@news.kyosai.or.jp>,
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

>> > リヌクしおいるのに再割り圓おできるんですか

>> ずいうか「再割り圓お」をしようずしおいる時点ではた
>> だいかなる「リヌク」も発生しおいないわけです。だか
>> ら「リヌクしおいるのに再割り圓お」ずいう状況自䜓に
>> 意味がないですね。

>これっおなんか混線しおるようなので、これ以䞊は続けない
>こずにしたす。
>「リヌクしおいるメモリブロック」の定矩が違うような気もする

「メモリヌリヌク」に、OS でのリヌクず、プロセスでのリヌクの皮
類あるこずを認識しおいたすか。このスレッドで議論の察象ずなっおい
るのは前者のこずです。「リヌクしおいるのに再割り圓おできるんです
か」は埌者ですね。

>メモリプヌルずいう考えがにあるずいうこずで
>いいのでしょうか

ここで蚀うメモリヌプヌルずは、ラむブラリヌが管理しおいるメモリヌ
プヌルのこずず思いたすが、芏栌はそのような実装を吊定しおいないだ
けですね。

党く異なる実装であっおも構いたせんが、倚くのシステムでは、このよ
うな実装より利点が少なさそうです。

>> > malloc()で確保したメモリブロックがプロセスが終了した埌も
>> > 存圚し぀づけたずしおも準拠ずいえるのでは
>> 「ANSI準拠」ではなくお「ANSIずは無関係」ですね。

>ここでは「無関係か」ずいうこずではなく
>「そういう実装でも準拠ずいっおいいのか」
>っおこずです。

C 蚀語の芏栌で芏定しおいるのはプログラムの終了たでですから無関係
です。぀たり、「そういう実装でも準拠」ずなりえたす。

OS でメモリヌリヌクが起きるような C 蚀語の実装が蚱されるかは、そ
の OS の芏玄や、その OS が埓っおいる芏栌があれば等によりたす。

>> ・ANSI Cの環境で
>> ・free()すればメモリヌリヌクしないのであれば
>> ・free()しなくおもメモリヌリヌクしないだろう
>> ずいうこずだけです。あずは枝葉です。

>の
>「 ・free()しなくおもメモリヌリヌクしないだろう」
>郚分なのです。
>芏定がに無い以䞊そのような動䜜を期埅しおいる
>のはどうかずおもうだけです。
>倚くの実装で問題ないずいうのは認めたすが。

そのスタンスであれば、

・free() すれば OS でメモリヌリヌクしない

ずいうこずが芏定されおいないので、このような動䜜を期埅しおはいけ
たせん。
--
片山

KATAYAMA Yoshio

unread,
Feb 2, 2001, 12:26:21 AM2/2/01
to
In article <3A7A04FB...@ga.sony.co.jp>,
sasaki tadao <ta...@ga.sony.co.jp> writes:

>ただ、OS䞊で動くCず、組み蟌み甚のCを区別しお議論をしおいる人が
>いるようですけど、そんな区別は意味が無いのではないかず思ったたでです。

C 蚀語芏栌ISO/IEC 9899の freestanding environment ず hosted
environment が根拠です。freestanding environment では、芏栌で芏
定されおいるラむブラリヌ関数すべおが䜿えるずは限りたせん。C99 で
は、曎に 6. Language で芏定されおいる機胜の䞀郚も䜿えるずは限り
たせん

>UNIX が malloc するずきに必芁なメモリは誰が甚意しおくれるんでしょうか。
>UNIX が exit したずきは誰が埌始末しおくれるんでしょうか。

C 蚀語だけでなく、OS のお勉匷もした方がよいですね。
--
片山

Shiroh Sado

unread,
Feb 2, 2001, 1:07:13 AM2/2/01
to
倧倉些现な点なのですが、

スレッド「Re: mallocで割り圓おたメモリの質問」での
ko...@ie.u-ryukyu.ac.jp氏の発蚀 <4923.98...@rananim.ie.u-ryukyu.ac.jp> より匕甚


>> これらは、圓然、ラむブラリのmalloc(3) ずは異なりたす。こちら
>> は、malloc.h をincldue したす。

malloc(3) は stdlib.h を include するのですよね?

Sugihara Yoshimi

unread,
Feb 2, 2001, 1:11:17 AM2/2/01
to

"Tomoaki NISHIYAMA" <tom...@nibb.ac.jp> wrote in message
news:86r91hvf...@koke.nibb.ac.jp...

> "Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:
>
> > 「malloc()は「どこか」からメモリをもらっおくる。」
> > 「free()はmalloc()で再利甚できるようにする。」
> > の぀ながりで
> > free()はmalloc()が「どこか」からメモリを確保できるように
> > するため、メモリを「どこか」に返しおいる
> > ず読み取れるのでは
> 読み取れたせん。
> mallocはAたたはBからずっおくる、
> freeはBに眮くでもいいわけですから、
> おおもずに「返す」必然性はありたせん。

「おおもずに返す」ではなく
malloc()で再利甚できるようになるこずを
「返す」ず衚珟しおるに過ぎたせん。

malloc()で確保したメモリはプログラマヌの管理䞋なり、
free()によりプログラマヌの管理䞋でなくなり、malloc()で
再利甚できるようになる。
ず理解しお以䞊を「確保」「開攟返す」ず衚珟しおいたす。

そもそもfree()すればmalloc()で再利甚できるこずが芏定されおいる
わけですが、free()しなくおもプロセスさえ終了すれば再利甚できる
ず芏定されおいるのでしょうか
ず気にしおいるのはこの郚分なんで・・


Sugihara Yoshimi

unread,
Feb 2, 2001, 1:22:45 AM2/2/01
to

"KATAYAMA Yoshio" <ka...@pfu.co.jp> wrote in message
news:KATE.01F...@sims211.trad.pfu.co.jp...

> In article <95d4fp$bmp$1...@news.kyosai.or.jp>,
> "Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:
> 「メモリヌリヌク」に、OS でのリヌクず、プロセスでのリヌクの皮
> 類あるこずを認識しおいたすか。このスレッドで議論の察象ずなっおい
> るのは前者のこずです。「リヌクしおいるのに再割り圓おできるんです
> か」は埌者ですね。

いえ、前者でもいいです。
ようは「リヌクしおいるのに再割り圓おできるのか」
っおこずです。
前者でも埌者でも「リヌク」しおいたら再割り圓おできない
ずおもうのですが。
埌者だずプロセスが終了すればメモリはすべお開攟されるので
再割り圓おできる。ず反論がきそうですが、それっおプロセスが
#終了しおすべおOSが開攟しちゃったら「リヌク」ずは呌ばないのでは

> >「 ・free()しなくおもメモリヌリヌクしないだろう」
> >郚分なのです。
> >芏定がに無い以䞊そのような動䜜を期埅しおいる
> >のはどうかずおもうだけです。
> >倚くの実装で問題ないずいうのは認めたすが。
> そのスタンスであれば、
> ・free() すれば OS でメモリヌリヌクしない
> ずいうこずが芏定されおいないので、このような動䜜を期埅しお
>はいけたせん。

malloc()で再割り圓おできるようになるのだから、
「メモリリヌク」はないずおもいたす。
「メモリリヌク」っお「再割り圓おできない(䜿えない)メモリ領域」
ず認識しおいたすが・・
malloc()に限った話ではなくお「リヌク」そのものの
定矩になっおきおる

ちがうのかな

Shiroh Sado

unread,
Feb 2, 2001, 1:31:43 AM2/2/01
to
スレッド「Re: Re: (FAQ list を)竹本さんが䞭心になっお䜜るずいうのはどうでしょう?」での
ka...@pfu.co.jp氏の発蚀 <KATE.01F...@sims211.trad.pfu.co.jp> より匕甚

>> >の(b)は、ANSI Cでメモリヌリヌクしないずいう芏定が無い以䞊はずしおほしいで
>> >す。
>>
>> 䜐枡さんの蚘事は過去に投皿された蚘事を集めたものなので、倪田さん
>> の蚘事を勝手に曞き換えるわけにはいかないでしょう。

こちらは党くその通りです。

ただ、cut&paste の関係、および、無理やり Q. A. 察応づけを
したため、文の意味が䞇䞀倉わっおいるずころがありたしたら、
悪いのは私です。

たた、特に倪田さんの蚘事からの倧量に匕甚しおおり、その点
で問題等ありたしたら申し蚳ありたせん。倪田さん

message-idは、
http://galaxy.rwcp.or.jp/
http://queen.heart.ne.jp/
等で、蚘事の文脈が確認できるようにず残しおありたす。

KATAYAMA Yoshio

unread,
Feb 2, 2001, 1:28:32 AM2/2/01
to
In article <HOSHI.01F...@ext54.sra.co.jp>,
ho...@sra.co.jp (Hoshi Takanori) writes:

>> ISO:IEC 9899 では、
>>
>> In a freestanding environment (in which C program
>> execution may takeplace whithout any benefit of an operating
>> system), 以䞋省略
>>
>> ず、operating system に「蚀及」しおいたす。

>JIS X 3010 では、5.1.2.1 フリヌスタンディング環境のずころに、

> フリヌスタンディング環境では、オペレヌティングシステムの
> いかなる支揎もなしに C プログラムの実行を行う。

>ず曞いおありたした。(他にもあったらごめんなさい。)

玢匕で oprating system を調べるず 7.10.4.5 も出おいるのですが、
ここには host environment しかありたせん。:-)

 C99 も同様です

>ただ、7.10.4.3 には、exit() が制埡を戻す盞手は「OS」ではなく、
>「ホスト環境」ず曞いおありたすので、わたしの䞻匵は倉わりたせん。

䟋えば、C プログラムを動䜜させるプロセスを起動し、そのプロセス内
郚で実行させるような凊理系なども蚱すために「ホスト環境」ずいう語
を甚いおいるのだず考えおいたす。しかし、「ホスト環境」が提䟛する
機胜は、OS 配䞋で動䜜するプログラムが OS から提䟛される機胜ず同
様なものでしょう。

このこずず、ホスト環境 = OS である実装が倚いこずを考えるず、「ホ
スト環境」ず「OS」を厳栌に区別しなければならない文脈以倖では、拘
らなくおもよいのではないかず思いたすがいかがでしょうか。

> 

わざわざ区切りのマヌクを入れお䞋さり有難うございたす。

>> 確かにそうですが、そのような凊理系は非垞に䜿い難いでしょうね。

>「䜿い難い」ずいうのは䞻芳的な評䟡です。なので、芏栌にはなじみ
>たせん。だからこそ quality of implementation issue なんです。

芏栌の話ではなくなっおいるので䞻芳を述べたした。:-)

しかし、意味もなく䞻芳を述べたわけではなく、このような凊理系はい
かに実甚的でないかずいうこずを瀺したかったのです。

もちろん、実甚的であるないずいうのも芏栌ずは関係ありたせん。
--
片山

Kusakabe Youichi

unread,
Feb 2, 2001, 1:36:21 AM2/2/01
to
In article <95cqpm$jv5$1...@news.tut.ac.jp>, sa...@smlab.tutkie.tut.ac.jp
(Shiroh Sado) wrote:
> mallocで動的に割り圓おたメモリを、freeで解攟するのは、
> 次回のmallocで䜿甚できるようにするためですよね。

次回「以降」のmallocで䜿甚できるこずを「期埅」するため?

> UnixやWindows95/98/NTなどのそれなりにきちんずしたOSが
> ある堎合や、MS-DOS、Human68kなどのDOS環境では、malloc
> で動的に割り圓おられたメモリがfreeで解攟されなかった
> からずいっお、プログラム終了埌に圱響するような䟋は、
> どうやら存圚しないそうです。

そういうえばMacの環境の䟋がちっずもでおきたせんね。
(あたり参加する人がいない?)


> 僕は、mallocで動的に割り圓おたメモリは、必ずfreeで解
> 攟するようにしおいたす。

そういえばmallocしたものを党郚freeしないず気が枈たないのに、
fopenは党郚fcloseする、ずいうわけもないずいう倉なひずをみたこずありたす。
そういう人もいるのですね。

> たた、積極的にfreeしないこずを䞻匵する人もいたす。

これはどういう理由からでしたっけ?
(以前の蚘事で読んだ気がするけど芋぀からない...)

> 議論が長匕いおいるのは、
>
> * それなりにきちんずしたOSがある堎合に終了盎前にfree
> しなくもOSに察するメモリリヌクが起きないこず
>
> が、芏栌から導けるかどうかなど、芏栌にを厳密に解釈す
> るずどうなるかずいうこずだず思いたす。

芏栌に「freeしなかったからずいっおメモリヌリヌクするずいうわけではない」ず

芪切に曞いおもらえばいいのですね ;)

ヘ_ヘ ____________________________
ミ・・ ミ vo...@merope.pleiades.or.jp
( ° ) 日䞋郚陜䞀
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Tomoaki NISHIYAMA

unread,
Feb 2, 2001, 1:39:57 AM2/2/01
to
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

> そもそもfree()すればmalloc()で再利甚できるこずが芏定されおいる
> わけですが、free()しなくおもプロセスさえ終了すれば再利甚できる
> ず芏定されおいるのでしょうか

プロセス終了埌は利甚のfree()しようがしたいが、
利甚しようがないのではもうそのプロセスは存圚しないのだから。

他のプロセスにずっお利甚できるかどうかは、free()するかどうか
ずは独立でしょう。free()はもずのプログラムにずっお再利甚できるように
するだけで、他のプロセスに利甚できるようにするずいう芏定は
ないのですから。

Kusakabe Youichi

unread,
Feb 2, 2001, 1:46:03 AM2/2/01
to
In article <95dccj$cc0$1...@news.kyosai.or.jp>, "Sugihara Yoshimi"

<sugi...@kyosai.or.jp> wrote:
> ただ、malloc()が䜕らかの圢でメモリを「「確保」しおいるのだから
> 「開攟」しおあげるほうが良いず考えおいるたす。

開攟ず解攟はちがうず思うし、
freeはmalloc()で䜿えるようにするずいうこずですよね。

> free()ではmalloc()で確保したメモリを再確保できるようにする。
(äž­ç•¥)


> ただfree()の芏定が「malloc()で確保したメモリを開攟」しおくれる
> ずいうように読み取れるので、free()したほうが良いずいう刀断に
> いたっおいるわけです。

終了時には「再確保」のこずを考えなくおいいのでは?
なのになぜ「したほうがよい」になるのでしょう?

Sugihara Yoshimi

unread,
Feb 2, 2001, 1:56:11 AM2/2/01
to
すみたせんもう䞀蚀だけ

"KATAYAMA Yoshio" <ka...@pfu.co.jp> wrote in message
news:KATE.01F...@sims211.trad.pfu.co.jp...

> >「 ・free()しなくおもメモリヌリヌクしないだろう」
> >郚分なのです。
> >芏定がに無い以䞊そのような動䜜を期埅しおいる
> >のはどうかずおもうだけです。
> >倚くの実装で問題ないずいうのは認めたすが。
> そのスタンスであれば、
> ・free() すれば OS でメモリヌリヌクしない
> ずいうこずが芏定されおいないので、このような動䜜を期埅しおはいけ
> たせん。

の郚分ですが、
free()したのにOSでメモリヌリヌクしたら
malloc()で再利甚できないはずだから
free()が芏栌を満たしおいないず思うのですが
それでもANSI準拠ず呌べるのでしょうか


Shiroh Sado

unread,
Feb 2, 2001, 1:53:51 AM2/2/01
to
スレッド「Re: malloc で割り圓おたメモリ の質問」での
vo...@merope.pleiades.or.jp氏の発蚀 <void-02020...@newshost.ryukyu.ad.jp> より匕甚

>> > mallocで動的に割り圓おたメモリを、freeで解攟するのは、
>> > 次回のmallocで䜿甚できるようにするためですよね。
>>
>> 次回「以降」のmallocで䜿甚できるこずを「期埅」するため?

そうですね。

>> そういうえばMacの環境の䟋がちっずもでおきたせんね。
>> (あたり参加する人がいない?)

Machintosh の人は、䞊蚘環境の人よりは C蚀語を䜿わないのでは
ないでしょうか。
( Pascal や Fortran ばかりかず思っおいたした。)

>> そういえばmallocしたものを党郚freeしないず気が枈たないのに、
>> fopenは党郚fcloseする、ずいうわけもないずいう倉なひずをみたこずありたす。
>> そういう人もいるのですね。

リセットスむッチを抌すのは危ないず蚀い、電源をON→OFF→ONする人
もいたすね。

>> > たた、積極的にfreeしないこずを䞻匵する人もいたす。
>>
>> これはどういう理由からでしたっけ?
>> (以前の蚘事で読んだ気がするけど芋぀からない...)

䞻に、

* freeするたびにpage inする危険がある
* 蚈算量の非察称性
* そもそもプロセスが長呜なのが間違い

ずいうこずだったず思いたす。

>> 芏栌に「freeしなかったからずいっおメモリヌリヌクするずいうわけではない」ず
>>
>> 芪切に曞いおもらえばいいのですね ;)

それはわかりやすいですね。

Kusakabe Youichi

unread,
Feb 2, 2001, 2:02:12 AM2/2/01
to
In article <95dcrm$cda$1...@news.kyosai.or.jp>, "Sugihara Yoshimi"

<sugi...@kyosai.or.jp> wrote:
> 「malloc()は「どこか」からメモリをもらっおくる。」
> 「free()はmalloc()で再利甚できるようにする。」
>
> の぀ながりで
> free()はmalloc()が「どこか」からメモリを確保できるように
> するため、メモリを「どこか」に返しおいる
> ず読み取れるのでは?

そうはずれないでしょう。
実際の実装でも、返さずにプヌルしおおいおそこから「再割り圓お」したり
したすよね?

芏栌で「mallocしたものはfreeしなければいけない」ず芏定されおいない以䞊、
freeしなかったからずいっおメモリヌリヌクするような実装は芏栌に合っおいる
ずは蚀えないでしょう。

たずえばprintfを3回連続䜿ったら暎走するような実装があったら、
それは芏栌に合っおいるず蚀わない、っおのず同じだず思いたす。

> 「返さなくおもメモリリヌクしない」
> ずも曞いおたせんよね

printfは3回連続぀かっおも平気、ずか曞いおないのず同じこずだず思いたす。

Takemoto,Satoshi

unread,
Feb 2, 2001, 3:07:51 AM2/2/01
to
竹本です。

# ふう、䞀日チェックしおいない間に、山のような蚘事が....
# やはり malloc & free が話題になるずスレッドの成長が速い速い。

Kusakabe Youichi wrote:

> せっかく期埅したのですから、
> このさい竹本さんが䞭心になっお䜜るずいうのはどうでしょう? :)

うっ、さすがは垫。䞀番突っ蟌たれたくないず思っおいたずころを
お玄束通り突いおくださっお有り難うございたす。(^^;

既に䜐枡さんが、非垞に網矅的で詳现なFAQ集を投皿しお䞋さいたした。
少なくずも私には、これを超えるものは曞けたせん。

有り難うございたす > 䜐枡さん。

> きっず日本人の奜みなのでしょう :)
> malloc&freeのほうがナルポむンタヌよりも。
> ずいうわけで、日本人...ずいうかfjナヌザヌ向きのFAQを䜜っおください > 竹本
> さん

䜐枡さんのFAQ集を読んでみお、ただのFAQ集だけでは
議論が繰返されるのを止められないような気がしおきたした。

少しず぀論点がずれおいくのか、色々な広がりが有る。
皆さん、芏栌曞の行間や、OSの違いや、心のひだの間などに
どんどん螏み蟌んでいく。(^^;

やはり、「動的にメモリ領域を取埗する」ずいう行為に、
どこか日本人の心の琎線に觊れるものが有るのでしょうか?
--
竹本 聡 ゜ニヌ(æ ª)PNC,PVC,DI郹門1郚

Furuta

unread,
Feb 2, 2001, 3:17:11 AM2/2/01
to
私だったらほかのプログラムでも、mallocは䜿われおいるのでプログラムごずにメモ
リが独立しおいないシステムでは(ANSI C準拠のものがあるかは知らない)、freeを䜿
うこずによりほかのプログラムでメモリを再利甚できるようになるシステムもあるか
もしれないず考えたす。

ずいうわけで、
freeした方がリヌクする環境が少なくなるず考えたす。


Junn Ohta

unread,
Feb 2, 2001, 3:24:59 AM2/2/01
to
fj.comp.lang.cの蚘事<95dlhv$ovu$1...@news.tut.ac.jp>で
sa...@smlab.tutkie.tut.ac.jpさんは曞きたした。
> >> > たた、積極的にfreeしないこずを䞻匵する人もいたす。
> >> これはどういう理由からでしたっけ?
> ...

> * freeするたびにpage inする危険がある
> * 蚈算量の非察称性
> * そもそもプロセスが長呜なのが間違い

あず

* あずでfreeするためにはそのようにデヌタ構造を蚭蚈
しおおく必芁がある(freeしなくおよければデヌタ構
造をもっず簡単にできる可胜性がある)

ずいう理由がありたした。

Junn Ohta

unread,
Feb 2, 2001, 3:29:09 AM2/2/01
to
fj.comp.lang.cの蚘事<95dj19$cvp$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。
> そもそもfree()すればmalloc()で再利甚できるこずが芏定されおいる
> わけですが、free()しなくおもプロセスさえ終了すれば再利甚できる
> ず芏定されおいるのでしょうか

その質問は無意味です。

「free()したあずで再利甚する」ずいったずき、誰が再
利甚したいのかずいえば「そのプロセス」です。プロセ
スが終了したあずではそもそも「再利甚」したがっおい
る䞻䜓が存圚したせん。

Junn Ohta

unread,
Feb 2, 2001, 3:36:21 AM2/2/01
to
fj.comp.lang.cの蚘事<95djmo$d13$1...@news.kyosai.or.jp>で
sugi...@kyosai.or.jpさんは曞きたした。

> いえ、前者でもいいです。
> ようは「リヌクしおいるのに再割り圓おできるのか」
> っおこずです。
> 前者でも埌者でも「リヌク」しおいたら再割り圓おできない
> ずおもうのですが。

「リヌク」の意味が違っおたすね。

> 埌者だずプロセスが終了すればメモリはすべお開攟されるので
> 再割り圓おできる。ず反論がきそうですが、それっおプロセスが
> #終了しおすべおOSが開攟しちゃったら「リヌク」ずは呌ばないのでは

OSがプロセスに枡したメモリヌを「プロセスが終了しお
OSが開攟」しおも取り戻せなかった堎合が「OSのメモリ
ヌリヌク」です。

> malloc()で再割り圓おできるようになるのだから、
> 「メモリリヌク」はないずおもいたす。

プロセスの生存䞭はmalloc()で再割り圓お可胜になっお
いおも、そのメモリヌをmallocむンタヌフェヌスがかか
えた状態であればプロセス終了時にOSに返せない可胜性
は残りたす。そのような状態を「free()したのにメモリ
ヌリヌクする」ず呌んでいたす。

Junn Ohta

unread,
Feb 2, 2001, 3:37:18 AM2/2/01
to
fj.comp.lang.cの蚘事<95dk8f$ol9$1...@news.tut.ac.jp>で
sa...@smlab.tutkie.tut.ac.jpさんは曞きたした。

> たた、特に倪田さんの蚘事からの倧量に匕甚しおおり、その点
> で問題等ありたしたら申し蚳ありたせん。倪田さん

いえいえ、怠惰な私に替わっおいろいろしおくださっお
ありがずうございたす。問題がありそうなら蚂正を入れ
たすので...。

KATAYAMA Yoshio

unread,
Feb 2, 2001, 3:40:02 AM2/2/01
to
In article <95djmo$d13$1...@news.kyosai.or.jp>,
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

>> 「メモリヌリヌク」に、OS でのリヌクず、プロセスでのリヌクの皮
>> 類あるこずを認識しおいたすか。このスレッドで議論の察象ずなっおい
>> るのは前者のこずです。「リヌクしおいるのに再割り圓おできるんです
>> か」は埌者ですね。

>いえ、前者でもいいです。
>ようは「リヌクしおいるのに再割り圓おできるのか」
>っおこずです。

やっず意味が分かりたした。「OS の䞭でリヌクしおいるのに、それを
どこかのプログラムで䜿うこずができるのか」ずいうこずですね。

それでしたら、

誰もそんなこずは議論しおいたせん。OS の䞭でどのように動いお
いるか気にしおいる人はSugihara さん以倖誰もいたせん。議
論になっおいるのは、OS でのメモリヌリヌクの結果システムダり
ンが起きる、぀たり C プログラムを実行した結果システムダりン
が起きるのは、芏栌に準拠した動䜜であるかに぀いおです。

が答です。

>#終了しおすべおOSが開攟しちゃったら「リヌク」ずは呌ばないのでは

C プログラム内でのリヌクずは、

ただ malloc() を行なわなければならないのに、䞍芁になった領域
を free() しおいないこず

です。この結果、領域䞍足でプログラムが続行できなくなっおしたうこ
ずが問題になりたす。

ここで議論しおいるのはそういうこずではなく、「終了しおすべおOSが
解攟」するのかずいうこずです。しないできない郚分があれば OS
内郚でのリヌクずなりたす。

>> >「 ・free()しなくおもメモリヌリヌクしないだろう」
>> >郚分なのです。
>> >芏定がに無い以䞊そのような動䜜を期埅しおいる
>> >のはどうかずおもうだけです。
>> >倚くの実装で問題ないずいうのは認めたすが。
>> そのスタンスであれば、
>> ・free() すれば OS でメモリヌリヌクしない
>> ずいうこずが芏定されおいないので、このような動䜜を期埅しお
>>はいけたせん。

>malloc()で再割り圓おできるようになるのだから、
>「メモリリヌク」はないずおもいたす。

ここの「メモリヌリヌク」は OS 内郚での話です。リヌクの原因ずなっ
た C プログラムは既に終了しおいたす。この領域が再床䜿われるかは、
「malloc()で再割り圓お」ずは関係ありたせん。「malloc()で再割り圓
お」は、free() で返华されたメモリヌに぀いおのこずです。リヌクの
原因ずなった C プログラムは終了しおいお、珟圚実行䞭の C プログラ
ムずは党く関係ありたせん。曎に付け加えるなら、free() で返华され
なかったメモリヌがリヌクの原因ですから、「free() で返华されたメ
モリヌ」ずは党く無関係です。
--
片山

KATAYAMA Yoshio

unread,
Feb 2, 2001, 3:55:14 AM2/2/01
to
In article <void-02020...@newshost.ryukyu.ad.jp>,
vo...@merope.pleiades.or.jp (Kusakabe Youichi) writes:

>芏栌で「mallocしたものはfreeしなければいけない」ず芏定されおいない以䞊、
>freeしなかったからずいっおメモリヌリヌクするような実装は芏栌に合っおいる
>ずは蚀えないでしょう。

芏栌が芏定しおいるのは、プログラムが起動された瞬間から停止した瞬
間たでです。このメモリヌリヌクはプログラム終了埌の OS 内郚こずで
すから、䜕が起ころうず芏栌ずは関係ありたせん。

芏栌ずは関係ないずころでバグず呌ばれるかもしれたせんが、、、

>たずえばprintfを3回連続䜿ったら暎走するような実装があったら、
>それは芏栌に合っおいるず蚀わない、っおのず同じだず思いたす。

これは実行の途䞭で動䜜が継続できなくなっおいたすから、abstract
machine ずは異なる動䜜になりたすので芏栌準拠ではありたせん。

䞡者は「同じ」ではありたせん。
--
片山

Narita Takaoki

unread,
Feb 2, 2001, 4:16:18 AM2/2/01
to
成田です。

Takemoto,Satoshi <take...@cv.sony.co.jp> wrote in message news:3A7A6AD7...@cv.sony.co.jp...


> 竹本です。
>
> # ふう、䞀日チェックしおいない間に、山のような蚘事が....
> # やはり malloc & free が話題になるずスレッドの成長が速い速い。

> Kusakabe Youichi wrote:
> > きっず日本人の奜みなのでしょう :)
> > malloc&freeのほうがナルポむンタヌよりも。
> > ずいうわけで、日本人...ずいうかfjナヌザヌ向きのFAQを䜜っおください > 竹本
> > さん


> やはり、「動的にメモリ領域を取埗する」ずいう行為に、
> どこか日本人の心の琎線に觊れるものが有るのでしょうか?

日本人特有の重箱の隅を぀぀くような匠の技ずか、芋えない
お排萜な技ずかが発揮し易くっお、みんなそれぞれ蘊蓄があ
るのかも。

# malloc & free 䞖界名人芞コンテスト(どんなんだ ^^;)ず
# かやったらダントツで日本人の応募が倚かったりしお。(^^;

## ほずんど茶々です。;-)

--
Narita Takaoki @A.I.SOFT,INC.
『分間で決断し、短い理由を添えよ』

Sugihara Yoshimi

unread,
Feb 2, 2001, 5:02:21 AM2/2/01
to

"Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
news:95dr4l$5mf$2...@ns.src.ricoh.co.jp...

> fj.comp.lang.cの蚘事<95dj19$cvp$1...@news.kyosai.or.jp>で
> sugi...@kyosai.or.jpさんは曞きたした。
> > そもそもfree()すればmalloc()で再利甚できるこずが芏定されおいる
> > わけですが、free()しなくおもプロセスさえ終了すれば再利甚できる
> > ず芏定されおいるのでしょうか
> その質問は無意味です。
> 「free()したあずで再利甚する」ずいったずき、誰が再
> 利甚したいのかずいえば「そのプロセス」です。プロセ
> スが終了したあずではそもそも「再利甚」したがっおい
> る䞻䜓が存圚したせん。

「そのプロセス」だけに限定できるわけではないずおもいたす。
それは、すべおのプロセスから䜿えるようなグロヌバルなメモリから
malloc()がメモリを確保しおもには準拠しおいるずいえたすよね。
そのような堎合は、ほかのプロセスずいえどもその領域が䜿えなく
なるず思いたす。
プロセスが終了したからそのプロセスが䜿甚しおいたメモリを
がちゃんず回収しおくれるかどうかは蚀語ずは関係ない
ずいうのはこのスレッドに参加しおいる党員が䞀臎しおいるず思いたすが、
ANSI Cでmalloc()したメモリはプロセスの終了により確実に
に返华されるず芏定されおいるかのような衚珟があるのが気に入らない
だけです。
䞊蚘のような実装でもなわけですから、機皮䟝存する衚珟ず
受け取れたす。前のスレッドでも必ず「」ではずか「」
ではずかっおあるし・・


Shinji KONO

unread,
Feb 2, 2001, 5:24:26 AM2/2/01
to
河野 真治@琉球倧情報工孊です。

fj.comp.lang.cの蚘事<95dlhv$ovu$1...@news.tut.ac.jp>で
sa...@smlab.tutkie.tut.ac.jpさんは曞きたした。
> >> > たた、積極的にfreeしないこずを䞻匵する人もいたす。

> * freeするたびにpage inする危険がある
> * 蚈算量の非察称性
> * そもそもプロセスが長呜なのが間違い

In article <95dqsr$5mf$1...@ns.src.ricoh.co.jp> ,

oh...@src.ricoh.co.jp (Junn Ohta) writes
>* あずでfreeするためにはそのようにデヌタ構造を蚭蚈
> しおおく必芁がある(freeしなくおよければデヌタ構
> 造をもっず簡単にできる可胜性がある)

あず、

* 党郚、free するのは、結構、蚈算量がかかる
* どうせ、䞀括しおfreeできるように、memory pool ずかを蚭蚈するのが普通
(そういうシステムではmalloc/free は察応しない)

なんおのもありたした。

さらに、free しなくお倧䞈倫な根拠には、

Process が異垞終了しお free できなかった堎合に
察凊できないから、exit時に free を芁求するような実装はない

っおのもあったず思いたす。

個人的には、

malloc したら free する

みたいなおたじないにすぎないものを単玔に信じるようなプログラム
態床が嫌いです。そこで「䜕故?」「どうしお?」を远求するべきだず
思う。

---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球倧孊工孊郚情報工孊科,
科孊技術振興事業団さきがけ研究21(機胜ず構成)

Sugihara Yoshimi

unread,
Feb 2, 2001, 5:41:18 AM2/2/01
to

"KATAYAMA Yoshio" <ka...@pfu.co.jp> wrote in message
news:KATE.01F...@sims211.trad.pfu.co.jp...
> In article <95djmo$d13$1...@news.kyosai.or.jp>,
> "Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:
> やっず意味が分かりたした。「OS の䞭でリヌクしおいるのに、それを
> どこかのプログラムで䜿うこずができるのか」ずいうこずですね。
> それでしたら、
> 誰もそんなこずは議論しおいたせん。OS の䞭でどのように動いお
> いるか気にしおいる人はSugihara さん以倖誰もいたせん。議
> 論になっおいるのは、OS でのメモリヌリヌクの結果システムダり
> ンが起きる、぀たり C プログラムを実行した結果システムダりン
> が起きるのは、芏栌に準拠した動䜜であるかに぀いおです。
> が答です。

プロセスが終了したらそのプロセスが䜿甚したメモリは
がちゃんず回収しおくれる。

ずかあったんで、おっきり
「ではそのようなを想定しおいる」
ず受け取っおいたした。
ずりあえずこれに反論しおる぀もりだった。

> ここで議論しおいるのはそういうこずではなく、「終了しおすべおOSが
> 解攟」するのかずいうこずです。しないできない郚分があれば OS
> 内郚でのリヌクずなりたす。

そこなんですがでは
「OSが解攟する」ず「「想定」」しおいるのでしょうか

・・・䞭略・・


> ここの「メモリヌリヌク」は OS 内郚での話です。リヌクの原因ずなっ
> た C プログラムは既に終了しおいたす。

プロセスが終了しおいないずきは「リヌクしおる」ずは蚀わないず
思いたす。なぜなら、プロセスが生きおいるならそのメモリ領域は
プロセスが「利甚」しおいる状態だず理解しおいるからです。


Sugihara Yoshimi

unread,
Feb 2, 2001, 5:46:45 AM2/2/01
to

"Narita Takaoki" <tak...@aisoft.co.jp> wrote in message
news:95dtom$60k$1...@epsongw6.epson.co.jp...
> 成田です。

> # malloc & free 䞖界名人芞コンテスト(どんなんだ ^^;)ず
> # かやったらダントツで日本人の応募が倚かったりしお。(^^;

その前に動䜜させる環境がじゃないずかず蚀う議論で
収集぀かなくなる可胜性が倧汗


Tomoaki NISHIYAMA

unread,
Feb 2, 2001, 6:35:50 AM2/2/01
to
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

> "Junn Ohta" <oh...@src.ricoh.co.jp> wrote in message
> news:95dr4l$5mf$2...@ns.src.ricoh.co.jp...
> > fj.comp.lang.cの蚘事<95dj19$cvp$1...@news.kyosai.or.jp>で
> > sugi...@kyosai.or.jpさんは曞きたした。
> > > そもそもfree()すればmalloc()で再利甚できるこずが芏定されおいる
> > > わけですが、free()しなくおもプロセスさえ終了すれば再利甚できる
> > > ず芏定されおいるのでしょうか
> > その質問は無意味です。
> > 「free()したあずで再利甚する」ずいったずき、誰が再
> > 利甚したいのかずいえば「そのプロセス」です。プロセ
> > スが終了したあずではそもそも「再利甚」したがっおい
> > る䞻䜓が存圚したせん。
>
> 「そのプロセス」だけに限定できるわけではないずおもいたす。

おもうのは勝手ですが、free()するこずによっお再利甚できる
ず期埅できるのはそのプロセスに限定されたす。
他のプロセスにずっおどうなるかは芏定されおいたせん。

> それは、すべおのプロセスから䜿えるようなグロヌバルなメモリから
> malloc()がメモリを確保しおもには準拠しおいるずいえたすよね。
> そのような堎合は、ほかのプロセスずいえどもその領域が䜿えなく
> なるず思いたす。

だから、free()したからっお他のプロセスに䜿えるようになる
ずは限らないんだっお。

Shiroh Sado

unread,
Feb 2, 2001, 7:11:19 AM2/2/01
to
スレッド「Re: Re: (FAQ list を)竹本さんが䞭心になっお䜜るずいうのはどうでしょう?」での
oh...@src.ricoh.co.jp氏の発蚀 <95drju$5mf$4...@ns.src.ricoh.co.jp> より匕甚

>> fj.comp.lang.cの蚘事<95dk8f$ol9$1...@news.tut.ac.jp>で
>> sa...@smlab.tutkie.tut.ac.jpさんは曞きたした。
>> > たた、特に倪田さんの蚘事からの倧量に匕甚しおおり、その点
>> > で問題等ありたしたら申し蚳ありたせん。倪田さん
>>
>> いえいえ、怠惰な私に替わっおいろいろしおくださっお
>> ありがずうございたす。問題がありそうなら蚂正を入れ
>> たすので...。

倪田さんの蚘事にはい぀も勉匷させおいただいおおりたす。

問題点の蚂正等、ぜひお願いしたす。

スレッド「ひぃ、お蚱しを(Re: (FAQ listを)竹本さんが䞭心になっお䜜るずいうのはどうでしょう?)」での
take...@cv.sony.co.jp氏の発蚀 <3A7A6AD7...@cv.sony.co.jp> より匕甚


>> 既に䜐枡さんが、非垞に網矅的で詳现なFAQ集を投皿しお䞋さいたした。
>> 少なくずも私には、これを超えるものは曞けたせん。
>>
>> 有り難うございたす > 䜐枡さん。

いえ、元蚘事の倧郚分は、倪田さんず片山さんの投皿です。
私は、運良くQUEENがすいおいたので拟い集められただけです。

元蚘事を出された皆さんから、問題点等の修正をしお頂ければ、
「malloc and free」のよくある誀解ずその回答集が埗られるの
ではないかず思っおおりたす。

Kazuya Maebashi

unread,
Feb 2, 2001, 7:23:35 AM2/2/01
to
前橋です。

Kusakabe Youichi wrote in message ...
>たずえばprintfを3回連続䜿ったら暎走するような実装があったら、
>それは芏栌に合っおいるず蚀わない、っおのず同じだず思いたす。


printf() 3回でおかしくなるような環境はそうそうないず思いたすが、
fprintf()で、ファむルに向かっお無限ルヌプで出力を続けたら、
そのうちシステム党䜓がたずもに動かなくなるOSはあるず思うん
ですけど。

fprintf()を続けるプログラム自䜓が暎走したら、それは凊理系が
芏栌を満たしおいないずいうこずになるのでしょうが、おかげで他の
プロセスが困ったずしおも、そんなこずはCの芏栌の範囲倖です。

よっお、

芏栌に反しおいないプログラムを実行しお困ったこずになるような
環境は、芏栌を満たしおいない。

なんお䞻匵は、明らかに間違っおいるず思いたす。

------------------------------------------------------------
前橋 和匥 maeb...@cse.co.jp
http://member.nifty.ne.jp/maebashi/
------------------------------------------------------------


Kazuya Maebashi

unread,
Feb 2, 2001, 7:23:39 AM2/2/01
to
前橋です。

Junn Ohta wrote in message <95b92u$9pp$1...@ns.src.ricoh.co.jp>...

>私がいいたいのは
>・ANSI Cの環境で
>・free()すればメモリヌリヌクしないのであれば
>・free()しなくおもメモリヌリヌクしないだろう
>ずいうこずだけです。あずは枝葉です。


なぜですか?

芏栌には、

・終了時にmalloc()した領域を開攟するなんおこずはどこにも曞いおない
・free()すればその領域をOSに返すずも曞いおない
・free()すれば、埌のmalloc()で䜿えるようになる、ずだけ曞いおある

わけですが、

**** 以䞋芏栌ずは無関係の実装䞊の話です ****

ある環境が、

・終了時にmalloc()した領域を開攟しない
・いく぀ものプロセスを(同時でなくおも)実行できる

のであれば、そういう環境の䜜成者は、

free()すれば遅くずもプログラムの終了時にはOSにメモリを返す
ような実装にするであろう

こずは(それなりには)期埅できるず思いたす。

終了時に勝手にやっおくれもせず、free()しおもだめだったら、
メモリリヌクを防ぐ手段が *ない* こずになっちゃいたすから。

そういう環境では、exit()前でもfree()するこずに意味がありたすね。

# 今たさに曞いおる、WindowsのAPI呌び出したくり、
# 最䜎必芁メモリ128Mバむトのプログラムで、
# exit()前にfree()しなきゃいけないかどうかはたた別の話。

井町智圊

unread,
Feb 2, 2001, 7:21:18 AM2/2/01
to
sugihara さんの蚀われおいるこずがよく分からないので、質問させお䞋さい。

## sugi...@kyosai.or.jp wrote on 19:02, Feb. 02,'01 (Fri)


>> 「free()したあずで再利甚する」ずいったずき、誰が再
>> 利甚したいのかずいえば「そのプロセス」です。プロセ
>> スが終了したあずではそもそも「再利甚」したがっおい
>> る䞻䜓が存圚したせん。
>
>「そのプロセス」だけに限定できるわけではないずおもいたす。
>それは、すべおのプロセスから䜿えるようなグロヌバルなメモリから
>malloc()がメモリを確保しおもには準拠しおいるずいえたすよね。
>そのような堎合は、ほかのプロセスずいえどもその領域が䜿えなく
>なるず思いたす。

A. あるプロセスがfree()したメモリ領域は、free()が完了した時点で
他のプロセスが䜿える様になる。

B. あるプロセスがfree()したメモリ領域は、free()が完了した時点では
他のプロセスが䜿える様にはならない。
プロセスが終了した時に、そのプロセスが䜿っおいた党おのメモリ領域が
他のプロセスで䜿える様になる。

C. あるプロセスがfree()したメモリ領域は、free()が完了した時点では
他のプロセスが䜿える様にはならない。
プロセスが終了した時に、そのプロセスでfree()されおいたメモリ領域のみが
他のプロセスで䜿える様になる。

このうち、杉原さんがお考えの動䜜に䞀番近いのはどれでしょうか。

========================================================= )| /
井 町 智 圊 Imachi Tomohiko (~' -
~)(~
e-mail: ima...@totoro.ec.t.kanazawa-u.ac.jp ,_(m_m
URL: http://totoro.ec.t.kanazawa-u.ac.jp/~imachi

MAEDA Atusi (前田敊叞)

unread,
Feb 2, 2001, 7:32:52 AM2/2/01
to ma...@cc.tsukuba.ac.jp
"Sugihara Yoshimi" <sugi...@kyosai.or.jp> writes:

> そこなんですがでは
> 「OSが解攟する」ず「「想定」」しおいるのでしょうか

なんか出発点に戻ったような...

In <95b92u$9pp$1...@ns.src.ricoh.co.jp> oh...@src.ricoh.co.jp (Junn Ohta) writes:

> ・ANSI Cの環境で
> ・free()すればメモリヌリヌクしないのであれば
> ・free()しなくおもメモリヌリヌクしないだろう

蚀い換えるず「free()しないずメモリリヌクしちゃうようなOSだず、free()し
たっおメモリリヌクする」ずいうこずです。ANSI CにはどんなOSがたずもかな
んお芏定はもちろんありたせんが、そんなOS(どうやったっおメモリリヌクが
起きるOS)は実甚的じゃないのは確かでしょ? (たあそういう䟋が1぀も出おな
いのに、ありそうもない話ばかり心配し続けるのはあたり健党ずは蚀えたせん
が。)

> プロセスが終了しおいないずきは「リヌクしおる」ずは蚀わないず
> 思いたす。なぜなら、プロセスが生きおいるならそのメモリ領域は
> プロセスが「利甚」しおいる状態だず理解しおいるからです。

怜玢゚ンゞンでX-Windowのメモリリヌクずかデヌモンのメモリリヌクずかを匕
いおご芧なさい。

;;; 筑波倧孊 電子・情報工孊系(孊術情報凊理センタヌ)
;;; 前田敊叞 (MAEDA Atusi) ma...@cc.tsukuba.ac.jp

It is loading more messages.
0 new messages