ヒープ
ヒープに関するAPIは、内部で排他処理を行っています。このためタイムクリティカルな 状況では使用しないことを推奨します。
コアサービスのヒープはメモリマップの SOLID_HEAP を使用します。 大量にヒープ領域を使用する場合は、 SOLID_HEAP 領域、および SOLID_RAM 領域のサイズに 注意してください。
API
ヒープ関連のAPIを使用するには、solid_malloc.h をインクルードしてください。
#include "solid_malloc.h"
SOLID_malloc
- 
void *SOLID_malloc(size_t size)
- コアサービスのヒープ領域から、メモリを確保します。 - パラメータ:
- size -- 確保する領域のサイズ(byte) 
 
- 戻り値:
- NULL: 確保失敗 
- それ以外: 確保したメモリへのポインタ 
 
 
SOLID_free
- 
void SOLID_free(void *ptr)
- SOLID_malloc(),SOLID_realloc(),SOLID_calloc() で確保したメモリを解放します。 - パラメータ:
- ptr -- 解放するメモリへのポインタ 
 
 
SOLID_realloc
- 
void *SOLID_realloc(void *ptr, size_t size)
- SOLID_malloc() で確保したメモリの割り当てを変更します。 - パラメータ:
- ptr -- 変更するメモリへのポインタ 
- size -- 変更する領域のサイズ(byte) 
 
- 戻り値:
- NULL: 再割り当て失敗 
- それ以外: 再割り当てしたメモリへのポインタ 
 
 
SOLID_calloc
- 
void *SOLID_calloc(size_t n, size_t size)
- コアサービスのヒープ領域から、メモリブロックを確保して、ゼロクリアを行います。 - パラメータ:
- n -- 確保するブロック数 
- size -- 確保するブロックの1つあたりのサイズ(byte) 
 
- 戻り値:
- NULL: 確保失敗 
- それ以外: 確保したメモリブロックへのポインタ 
 
 
struct solid_mallinfo
- 
struct solid_mallinfo
- 説明 - mallocに関する情報構造体 - 定義 - struct solid_mallinfo { size_t arena; /* Non-mmapped space allocated (bytes) */ size_t ordblks; /* Number of free chunks */ size_t smblks; /* Number of free fastbin blocks (always 0) */ size_t hblks; /* Number of mmapped regions (always 0)*/ size_t hblkhd; /* Space allocated in mmapped regions (bytes) */ size_t usmblks; /* Maximum total allocated space (bytes) */ size_t fsmblks; /* Space in freed fastbin blocks (bytes) (always 0) */ size_t uordblks; /* Total allocated space (bytes) */ size_t fordblks; /* Total free space (bytes) */ size_t keepcost; /* Top-most, releasable space (bytes) */ size_t fblkmax; /* Maximum size in free blocks (bytes) */ }; - メンバー - 
size_t arena
- 総メモリー量(byte) 
 - 
size_t ordblks
- 未使用ブロック数 
 - 
size_t smblks
- 常に0 
 - 
size_t hblks
- 常に0 
 - 
size_t hblkhd
- 確保しているメモリブロック(byte) 
 - 
size_t usmblks
- 割り当てられた最大エリア(byte) 
 - 
size_t fsmblks
- 常に0 
 - 
size_t uordblks
- 割り当て済みの総サイズ(byte) 
 - 
size_t fordblks
- 未使用エリアの総サイズ(byte) 
 - 
size_t keepcost
- trim可能な最大サイズ(byte) 
 - 
size_t fblkmax
- 一度に確保できる最大サイズ(byte) 
 
- 
size_t arena
SOLID_mallinfo
- 
int SOLID_mallinfo(struct solid_mallinfo *pInfo)
- コアサービスヒープ領域のメモリ情報を取得する - パラメータ:
- pInfo -- メモリ情報を格納するバッファ 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー 
 
 
SOLID_heap_create
- 
void *SOLID_heap_create(void *mempool, size_t size)
- 指定されたメモリをヒープ領域として初期化する。 - パラメータ:
- mempool -- ヒープとして使用する領域へのポインタ 
- size -- ヒープサイズ 
 
- 戻り値:
- NULL: 確保失敗 
- それ以外: ヒープ領域のポインタ 
 
 
SOLID_heap_destroy
- 
void SOLID_heap_destroy(void *heap)
- ヒープ領域を解放する。 - パラメータ:
- heap -- ヒープ領域へのポインタ 
 
 
SOLID_heap_alloc
- 
void *SOLID_heap_alloc(void *heap, size_t size)
- 指定されたヒープ領域からメモリを確保する。 - パラメータ:
- heap -- ヒープ領域へのポインタ 
- size -- 確保するサイズ(byte) 
 
- 戻り値:
- NULL: 確保失敗 
- それ以外: 確保したメモリへのポインタ 
 
 
SOLID_heap_align
- 
void *SOLID_heap_align(void *heap, size_t align, size_t size)
- 指定されたヒープ領域からアライメントを指定してメモリを確保する。 - パラメータ:
- heap -- ヒープ領域へのポインタ 
- align -- アライメント(byte) 
- size -- 確保するサイズ(byte) 
 
- 戻り値:
- NULL: 確保失敗 
- それ以外: 確保したメモリへのポインタ 
 
 
SOLID_heap_free
- 
void SOLID_heap_free(void *heap, void *ptr)
- SOLID_heap_alloc(), SOLID_heap_align()で確保したメモリを解放する。 - パラメータ:
- heap -- ヒープ領域へのポインタ 
- ptr -- 解放するメモリへのポインタ 
 
 
SOLID_heap_mallinfo
- 
int SOLID_heap_mallinfo(void *heap, struct solid_mallinfo *pInfo)
- 指定されたヒープ領域のメモリ情報を取得する - パラメータ:
- heap -- ヒープ領域へのポインタ 
- pInfo -- メモリ情報を格納するバッファ 
 
- 戻り値:
- SOLID_ERR_OK: 正常終了
- それ以外: エラー