ヒープの空きサイズより小さいサイズで MALLOC() を行った場合でもメモリ確保が失敗するときがありますが、なぜでしょうか?
「ヒープの空きサイズ = MALLOC() で確保できるヒープサイズ」ではありません。ヒープの 確保/解放が繰り返され、空きブロックが飛び飛びになり、ヒープの空きサイズ分連続して確保できない場合があるためです。
大きなヒープを確保する場合は IHEAP_CheckAvail() を使用して、指定したサイズ分ヒープが確保可能かどうかを調べてください。IHEAP_CheckAvail() は、引数で指定されたサイズの連続したヒープが確保できるかどうかを調べる関数です。