ヒープ
ヒープに関するAPIは、割り込み禁止状態で動作します。 割り込み処理中では呼び出さないでください。
コアサービスのヒープはコアサービス内でも使用するため、大量のメモリを 動的に確保する場合は、別の領域にメモリを確保し、SOLID_heap_XXX関数を 使用してください。
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) */ };
メンバー
- arena
総メモリー量(byte)
- ordblks
未使用ブロック数
- smblks
常に0
- hblks
常に0
- hblkhd
確保しているメモリブロック(byte)
- usmblks
割り当てられた最大エリア(byte)
- fsmblks
常に0
- uordblks
割り当て済みの総サイズ(byte)
- fordblks
未使用エリアの総サイズ(byte)
- keepcost
trim可能な最大サイズ(byte)
- fblkmax
一度に確保できる最大サイズ(byte)
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)
指定されたヒープ領域のメモリ情報を取得する
- パラメータ:
pInfo -- メモリ情報を格納するバッファ
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー