くぬぎざです。
gcc-2.7.2.3 + newlib-1.8.0 という環境で H8/3048F の
ソフトを開発しているのですが、このとき stdlib にある
malloc はどのような振る舞いをするのか、どなたかご存で
しょうか?
どうやら、malloc を呼ぶと ldscript の .data 部分で定義
されている領域をヒープとして割り当てる..と思う..
のですが、malloc のソースコードを見ると
newlib-1.8.0/newlib/libc/sys/h8300hms/malloc.c(多分これ)
-----------------------------------------------------
char *sbrk();
char *malloc(int s)
{
return sbrk(s);
}
free(char *s)
{
}
-----------------------------------------------------
malloc は sbrk のラッパーとなっており、free に至っては
何も実装されていません(;_;) それに、sbrk のソース
(newlib-1.8.0/newlib/libc/sys/h8300hms/sbrk.c) を見た
限りでは、malloc が呼ばれる度に、確保されたメモリの分
だけヒープのアドレスを増やしていっているだけのようなの
ですが、これだと malloc と free を繰り返すと、いずれは
スタックと衝突しますよねー。
だとすると、せめて free ぐらいはやってくれるヒープ管理
コードを自前(あるいはOSなど)で用意すべきだという気が
するのですが、そこのところは、どうするのが良いのでしょう。
実は簡単な疑似マルチスレッドライブラリ的な物を作っていて、
新たなスレッドを生成するときに、それ用の独立したスタック
領域をヒープに malloc で割り当てたいのです。でも、これ
だとスレッドを殺したときに、free が使えないなと..
椚座 淳介 (Junsuke Kunugiza)
E-Mail: kunugiza@xxxxxxx