あなたは事実をすべてmalloc
/free calls will be used in a LIFO fashion, you may be able to link in your own
そのmalloc関数/
free`機能を知っている場合C.でマーク/リリースメモリ割り当てを使用する標準的な方法はありませんすべてのブロックのwその自由もなります
#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()
を呼び出して、次のようなものを使用して後で割り当てられる。外部コードがLIFO順序でmalloc/free
を使用しない場合に使用できる代替アプローチですが、コードがそうするまでブロックが解放されない場合は、free()
は何もしませんが、他の機能上記のfree
のように動作します。より洗練されたバリエーションも可能ですが、最初のアプローチで十分であれば、その効率を上回ることはありません。組み込みシステムには非常にいいです(私は通常、malloc以外のものと呼んでいます)。
をおそらく配列またはそれはということです?あなたは避けようとしていますか? – byrondrossos
問題私はメモリがリークしているため、メモリの断片化を引き起こし、最終的にはメモリ不足の状態になっているサードパーティのライブラリを使用しています。しかし、いいニュースは私がリンクを制御することです。 :)私は私のカスタムmalloc/freeと最終的なフリー・アソシエイツをリンクするには、ある程度の時間が必要です。 :) –
私は1)それを修正するために図書館の所有者のために押すだろう。2)そのサードパーティのライブラリをメインコードとは別の実行可能ファイルに入れ、そのプロセスを定期的に停止して再起動してください。 3)単一のプロセスOSであれば、より良いライブラリを見つけることができます。 –