In den letzten Jahren erlaubt die (eingebettete) Software, mit der ich gearbeitet habe, im Allgemeinen nicht die Verwendung von malloc(). Die einzige Ausnahme ist, dass es während der Initialisierungsphase zulässig ist, aber sobald entschieden wurde, dass keine weiteren Speicherzuweisungen mehr erlaubt sind, schlagen alle zukünftigen Aufrufe von malloc() fehl. Da der Speicher aufgrund von malloc()/free() fragmentiert werden kann, wird es in vielen Fällen schwierig, zu beweisen, dass zukünftige Aufrufe von malloc() nicht fehlschlagen werden.
Ein solches Szenario trifft möglicherweise nicht auf Ihren Fall zu. Es kann jedoch nützlich sein, zu wissen, warum malloc() fehlschlägt. Die folgende Technik, die wir in unserem Code verwenden, da malloc() im Allgemeinen nicht verfügbar ist, könnte (oder könnte auch nicht) auf Ihr Szenario anwendbar sein.
Wir verlassen uns tendenziell auf Memory Pools. Der Speicher für jeden Pool wird während der transienten Startphase zugewiesen. Sobald wir die Pools haben, nehmen wir einen Eintrag aus dem Pool, wenn wir ihn benötigen, und geben ihn zurück, wenn wir fertig sind. Jeder Pool ist konfigurierbar und normalerweise für einen bestimmten Objekttyp reserviert. Wir können die Nutzung jedes einzelnen Pools im Laufe der Zeit verfolgen. Wenn uns die Pool-Einträge ausgehen, können wir herausfinden, warum dies der Fall ist. Wenn nicht, haben wir die Möglichkeit, unseren Pool zu verkleinern und Ressourcen zu sparen.
Ich hoffe, das hilft.