# OS_Alloc[From*]

## 構文

      #include <nitro/os.h>

      void* OS_AllocFromHeap( OSArenaId id, OSHeapHandle heap, u32 size );

      void* OS_AllocFromMain( u32 size );
      void* OS_AllocFromSubPriv( u32 size );
      void* OS_AllocFromMainEx( u32 size );
      void* OS_AllocFromITCM( u32 size );
      void* OS_AllocFromDTCM( u32 size );
      void* OS_AllocFromShared( u32 size );
      void* OS_AllocFromWramMain( u32 size );
      void* OS_AllocFromWramSub( u32 size );
      void* OS_AllocFromSubPrivWram( u32 size );

      void* OS_Alloc( u32 size );

## 引数

id | 領域を確保するヒープのあるアリーナのアリーナID
heap | 領域を確保するヒープのハンドル
size | 確保したい領域のサイズ(バイト)

## 返り値

領域を割り当てることが出来た場合、その領域の先頭アドレスを返します。
領域を割り当てることが出来なかった場合、NULL を返します。

## 説明

ヒープからメモリブロックを割り当てます。

`OS_AllocFromHeap()` では割り当てるヒープのハンドルと、そのヒープのあるアリーナを指定する必要があります。アリーナはアリーナID id で指定します。この値については `OS_InitArena()` を参照してください。

ヒープハンドルに OS_CURRENT_HEAP_HANDLE を指定すると、そのアリーナのカレントヒープが指定されたと見なします。

確保されるメモリ領域は、32 bytes にアライメントされています。

`OS_AllocFromMain()` は `OS_AllocFromHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromSubPriv()` は `OS_AllocFromHeap( OS_ARENA_MAIN_SUBPRIV, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromMainEx()` は `OS_AllocFromHeap( OS_ARENA_MAINEX, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromICTM()` は `OS_AllocFromHeap( OS_ARENA_ITCM, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromDTCM()` は `OS_AllocFromHeap( OS_ARENA_DTCM, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromShared()` は `OS_AllocFromHeap( OS_ARENA_SHARED, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromWramMain()` は `OS_AllocFromHeap( OS_ARENA_WRAM_MAIN, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromWramSub()` は O`S_AllocFromHeap( OS_ARENA_WRAM_SUB, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_AllocFromSubPrivWram()` は `OS_AllocFromHeap( OS_ARENA_WRAM_SUBPRIV, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

`OS_Alloc()` は ARM9では `OS_AllocFromHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, … )` の inline です。ARM7 では、O`S_AllocFromHeap( OS_ARENA_MAIN_SUBPRIV, OS_CURRENT_HEAP_HANDLE, … )` の inline です。

(注意)
0バイトの領域を確保しようとした場合、DEBUG ビルドでは ASSERT で停止します。それ以外のビルドでは動作は不定です。

`OS_DestroyHeap()` で破棄したヒープに対して領域を確保しようとすると、DEBUG ビルドの場合はアサートで停止します。RELEASE/FINALROM ビルドの場合は NULL を返します。

## 参照

`OS_InitArena, OS_InitAlloc, OS_CreateHeap, OS_FreeToHeap, OS_FreeAllToHeap
`

## 履歴

2004/07/07 サイズに0バイトを指定した場合の注意を追加
2004/03/08 ARM7 と ARM9 の違いを考慮
2004/02/25 アリーナの個数が６→９個に
2004/01/06 初版