# NNS_SndHeapAlloc

## 構文

      #include <nnsys/snd.h>

      typedef void (*NNSSndHeapDisposeCallback)( void* mem, u32 size, u32 data1, u32 data2 );

      void* NNS_SndHeapAlloc(
              NNSSndHeapHandle heap,
              u32 size,
              NNSSndHeapDisposeCallback callback,
              u32 data1,
              u32 data2 );

## 引数

`heap` | サウンドヒープハンドルです。
`size` | 確保するメモリサイズです。
`callback` | メモリブロックが解放されるときに呼びだされるコールバック関数です。
`data1, data2` | コールバック関数の引数用のユーザーデータです。

## 返り値

確保したメモリブロックの先頭アドレスを返します。確保に失敗すると、NULLを返します。

## 説明

サウンドヒープからメモリを確保します。確保されたメモリブロックの先頭アドレスは、32バイトアライメントされます。

各メモリブロックには、管理領域が必要になります。そのため実際には、確保するメモリサイズ`size` よりも、少し大きな空き容量が必要になります。空き容量が足りない場合は、関数は失敗します。

コールバック関数`callback`は、 `NNS_SndHeapClear`関数または、 `NNS_SndHeapLoadState`関数によって、 メモリブロックが解放されたときに呼びだされます。 コールバック関数の引数には、メモリブロックの先頭アドレス`mem`、メモリブロックのサイズ`size`、 ユーザーデータ`data1`、`data2`が渡されます。 コールバック関数が不要の時は、`callback`にNULLを入れます。

## 参照

NNS_SndHeapClear, NNS_SndHeapLoadState

## 履歴

2007/04/24 アライメントに関する説明追加
2004/06/01 初版