picox  0.1
xfixed_allocator.h ファイル

Fixed memory allocator. [詳解]

#include <picox/core/xcore.h>
xfixed_allocator.h の依存先関係図:
被依存関係図:

[ソースコード]

データ構造

struct  XFixedAllocator
 

マクロ定義

#define XFALLOC_MIN_ALIGNMENT   (X_ALIGN_OF(size_t))
 

関数

void * xfalloc_allocate (XFixedAllocator *self)
 
static size_t xfalloc_block_size (const XFixedAllocator *self)
 
void xfalloc_clear (XFixedAllocator *self)
 
void xfalloc_deallocate (XFixedAllocator *self, void *ptr)
 
static void * xfalloc_heap (const XFixedAllocator *self)
 
void xfalloc_init (XFixedAllocator *self, void *heap, size_t heap_size, size_t block_size)
 
static size_t xfalloc_num_blocks (const XFixedAllocator *self)
 
static size_t xfalloc_remain_blocks (const XFixedAllocator *self)
 

詳解

Fixed memory allocator.

メモリを固定サイズのブロックに分割してメモリアロケーションを行います。 通常のmallocを使用した場合との主な違いは以下の通りです。


[利点]

  1. 超高速

一般的に可変長メモリアロケータのメモリ確保と解放にかかる時間は不定です。固 定メモリブロックでは一定かつ、ほぼ1オペレーションで処理が完了します。

  1. 余分なヘッダ領域を一切使用しない

一般的な可変長メモリ確保では、例えば指定サイズのメモリにヘッダ情報の格納用 に4~16バイト程度追加で確保されます。このアロケータではヘッダ領域を一切使用 しません。

  1. 絶対に断片化しない

固定サイズのブロックなので当然ですが、何度メモリ確保と解放を繰り返しても断 片化しません。


[欠点]

  1. 確保サイズにバラつきがあると無駄が多い

[利用例]

  • 確保するメモリサイズが固定の部分で使用する。
  • 小サイズ(1~32バイト程度)メモリ確保用の高速アロケータとして使用する。
@author  MaskedW

関数詳解

void* xfalloc_allocate ( XFixedAllocator self)

ヒープから1ブロックを取り出して返します

static size_t xfalloc_block_size ( const XFixedAllocator self)
inlinestatic

1ブロックのサイズを返します

void xfalloc_clear ( XFixedAllocator self)

ヒープを初期状態に戻します

void xfalloc_deallocate ( XFixedAllocator self,
void *  ptr 
)

ヒープにブロックを返却します

ptrがNULLの時は何もしません。

static void* xfalloc_heap ( const XFixedAllocator self)
inlinestatic

ヒープメモリを返します

void xfalloc_init ( XFixedAllocator self,
void *  heap,
size_t  heap_size,
size_t  block_size 
)

メモリブロックを初期化します

引数
heapブロック化するメモリ領域
heap_sizeheap領域のバイト数
block_size1ブロックのサイズ
alignmentブロックのアラインメント
事前条件
  • heap != NULL
  • heap_size > 0
  • block_size > 0
注意
heapが指すアドレスと、block_sizeはsizeof(void*)のアライメントに切り上げられ ます。その結果、意図したブロック分けができていない場合がありますので、はじめ からアラインメントを意識した引数を用意するか初期化後に、必要量を満たせている か確認した方がよいでしょう。
static size_t xfalloc_num_blocks ( const XFixedAllocator self)
inlinestatic

heapの総ブロック数を返します

static size_t xfalloc_remain_blocks ( const XFixedAllocator self)
inlinestatic

heapの残りブロック数を返します