(toppers-users 2463) Re: malloc()の利用方法

TAKAGI Nobuhisa takagi-n @ biggie.jp
2006年 7月 11日 (火) 17:36:39 JST


二口様

> systask/newlibrt.c がリンクされていないようで、
> メモリ領域取得時のクリティカルセクションの確保も心配です。

newlibrt.cは、現状ではC++のときしかリンクされないようになっています。
また、あまりポータビリティがよいともいえません。

newlibのmallocを使うには、以下の関数を自作されるのが、一番手っ取り早い
かと思います。

・_sbrkまたは_sbrk_r
・__malloc_lock
・__malloc_unlock

_sbrk(または_sbrk_r)は、end以降の領域から要求されたサイズのメモリ
ブロックを割付けるためのものです。

__malloc_lockと__malloc_unlockは、名前からも分かるように、クリティカル
セクションを作るためのものです。
これはセマフォで実現してもよいのですが、ヒープ操作中にタスク例外が入り、
その中でmallocやfreeを呼び出すと破綻します。
別の方法で実現するか、タスク例外処理ルーチンではmallocやfreeを(ルール
として)禁止した方が無難です。

----------
高木信尚