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() は OS_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 では、OS_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 アリーナの個数が6→9個に
2004/01/06 初版