I problemi con realloc() nei sistemi incorporati non sono diversi rispetto a qualsiasi altro sistema, ma le conseguenze potrebbero essere più gravi nei sistemi in cui la memoria è più limitata e le conseguenze dell'errore meno accettabili.
Un problema non menzionato finora è che realloc() (e qualsiasi altra operazione di memoria dinamica del caso) è non deterministico; questo è il tempo di esecuzione è variabile e imprevedibile. Molti sistemi incorporati sono anche sistemi in tempo reale e in tali sistemi il comportamento non deterministico è inaccettabile.
Un altro problema è quello di filo di sicurezza. Controlla la documentazione della tua libreria per vedere se la tua libreria è sicura per i thread per l'allocazione dinamica della memoria. In genere, se lo è, sarà necessario implementare mutex stub per integrarlo con la libreria di thread o RTOS.
Non tutti emebdded sistemi sono uguali; se il tuo sistema embedded non è in tempo reale (o il processo/attività/thread in questione non è in tempo reale, ed è indipendente dagli elementi in tempo reale), e hai una grande quantità di memoria inutilizzata, o capacità di memoria virtuale, quindi l'uso di realloc() può essere accettabile, se forse non consigliato nella maggior parte dei casi.
Piuttosto che accettare "saggezza convenzionale" e barra di memoria dinamica a prescindere, è necessario comprendere i requisiti di sistema, e il comportamento delle funzioni di memoria dinamica e prendere una decisione appropriata. Detto questo, se si sta costruendo codice per la riutilizzabilità e la portabilità su una vasta gamma di piattaforme e applicazioni possibili, allora la riallocazione è probabilmente una pessima idea. Ad esempio, non nasconderlo in una libreria.
Nota anche che lo stesso problema esiste con C++ classi container STL che riallocazione dinamicamente e copiare i dati quando si aumenta la capacità del contenitore.
Perché non chiedi a chi te l'ha detto? – cnicutar
In questi giorni Embedded è un'area molto ampia. –
@cnicutar se potessi chiedere loro, non lo chiederò mai qui .. !! –