malloc
C でメモリ割り当てのマーク/free calls will be used in a LIFO fashion, you may be able to link in your own
リリースを使用する標準的な方法はありません/
。
#define MY_HEAP_SIZE 12345678
unsigned char my_mem[MY_HEAP_SIZE];
unsigned char *my_alloc_ptr = my_mem;
void *malloc(size_t size)
{
void *ret = my_alloc_ptr;
if (size <= MY_HEAP_SIZE && ((my_alloc_ptr - my_mem)+size) <= MY_HEAP_SIZE)
{
my_alloc_ptr += size;
return (void*)ret;
}
else
return (void*)0;
}
void free(void *ptr)
{
if (ptr)
my_alloc_ptr = ptr;
}
このアプローチでは、割り当てブロックごとにゼロバイトのオーバーヘッドが必要ですがfree()
、任意のブロックを呼び出すと、後で割り当てられたすべてのブロックも解放されます。malloc/free
外部コードがLIFO 順序で使用されない場合に使用できる代替アプローチですが、コードが解放されるまでブロックが解放されなくfree()
ても問題ありません。上記のようfree
に。より洗練されたバリエーションも可能ですが、最初のアプローチで十分な場合は、その効率に勝るものはありません。組み込みシステムには非常に便利です (ただし、通常は malloc 以外の名前で呼びます)。