(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を(ルール
として)禁止した方が無難です。
----------
高木信尚