2 * Hyper Operating System Application Framework
4 * @file fixmemheap_alloc.c
5 * @brief %jp{固定サイズメモリヒープクラス}%en{fixed size memory heap class}
7 * Copyright (C) 2006-2008 by Project HOS
8 * http://sourceforge.jp/projects/hos/
13 #include "fixmemheap_local.h"
17 /** %jp{MemHeapクラス 仮想関数テーブル}%en{MemHeap class virtual function table} */
18 const static T_MEMHEAP_METHODS FixMemHeap_Methods =
20 FixMemHeap_Alloc, /**< メモリの割り当て */
21 FixMemHeap_ReAlloc, /**< メモリの再割り当て */
22 FixMemHeap_Free, /**< メモリの開放 */
23 FixMemHeap_GetSize, /**< メモリのサイズ取得 */
24 FixMemHeap_GetAlign, /**< メモリアライメントの取得 */
25 FixMemHeap_AlignSize, /**< サイズをアライメント単位に拡張 */
31 void FixMemHeap_Constructor(C_FIXMEMHEAP *self, void *pMemBase, MEMSIZE BlkSize, MEMSIZE BlkNum)
37 /* %jp{親クラスコンストラクタ} */
38 MemHeap_Constructor(&self->MemHeap, &FixMemHeap_Methods);
41 self->pMemBase = pMemBase; /**< %jp{メモリ先頭ブロックのアドレス} */
42 self->BlkSize = BlkSize; /**< %jp{ブロックサイズ} */
43 self->BlkNum = BlkNum; /**< %jp{ブロック個数} */
46 ppBlk = (void **)self->pMemBase;
47 for ( i = 0; i < BlkNum - 1; i++ )
49 ppBlkNext = (void **)((char *)ppBlk + BlkSize);
50 *ppBlk = (void *)ppBlkNext;
55 self->ppFree = (void **)self->pMemBase;