最初にvalgrindを使用する必要があります(潜在的に見つけにくいメモリ リークや誤動作をデバッグするため)。でコンパイルすることを忘れないでくださいgcc -Wall -g
(そして、それが機能するときに使用します-Wall -O
); もちろん、警告が表示されなくなるまでコードを改善してください。
おそらく(アルゴリズムが適合する場合)、たとえば2のべき乗、または2のべき乗の3倍[おそらくマイナス2または3ワード]のメモリゾーンを(便利に)割り当てようとすることができます。少なくとも、あまりにも多くの異なるランダム サイズの割り当てを避けるようにしてください。
Boehm の保守的なガベージコレクターを使用してみmalloc
てください。GC_MALLOC
GC_MALLOC_ATOMIC
strdup
GC_STRDUP
free
GC_FREE
少なくともテスト目的で、おそらく bash ulimitビルトインを介してsetrlimit(2)を使用します。あなたが望む-おそらく(これらの制限を設定すると、OOMキラーが賢明に回避され、メモリが使い果たされたときに-called by-が失敗します)。RLIMIT_AS
RLIMIT_DATA
mmap
malloc
-fsanitize=addressを受け入れる GCC 4.8 でコンパイルすることをお勧めします。
独自のアプリケーション固有のガベージ コレクターを実装することもできます(そのウィキページを読んでください。洞察と用語が得られます)。マーク & コンパクト アルゴリズムは断片化に対抗します。
this question about memory fragmentationも参照してください。プラグツールを調べます。