[H8-ML(170)] malloc in newlib
From: Junsuke Kunugiza <jk@xxxxxxx>
Date: 1999年06月21日(月)13時25分37秒
くぬぎざです。

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

スレッド概略
[表示中](起点)


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]