ヒープ

ヒープに関する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)

SOLID_mallinfo

int SOLID_mallinfo(struct solid_mallinfo *pInfo)

コアサービスヒープ領域のメモリ情報を取得する

パラメータ:
  • pInfo -- メモリ情報を格納するバッファ

戻り値:

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 -- メモリ情報を格納するバッファ

戻り値: