alloca()
alloca memoria nello stack anziché nell'heap, come nel caso di malloc()
. Quindi, quando torno dalla routine, la memoria viene liberata. Quindi, in realtà, questo risolve il mio problema di liberare memoria allocata dinamicamente. La liberazione della memoria allocata attraverso malloc()
è un grosso mal di testa e se in qualche modo mancato porta a tutti i tipi di problemi di memoria.
Perché l'uso di è alloca()
scoraggiato nonostante le funzionalità di cui sopra?
free
(il che è ovviamente un vantaggio), non capacità di incorporarlo (ovviamente le allocazioni di heap sono molto più pesanti) ed ecc. L'unica ragione per evitare alloca
è per le grandi dimensioni. Cioè, sprecare tonnellate di memoria dello stack non è una buona idea, inoltre hai la possibilità di un overflow dello stack. In questo caso, considera l'utilizzo di malloca
/freea
alloca
è che la pila non può essere frammentata come l'heap. Ciò potrebbe rivelarsi utile per le applicazioni in stile run-forever in tempo reale, o anche per le applicazioni critiche per la sicurezza, poiché la WCRU può quindi essere analizzata staticamente senza ricorrere a pool di memoria personalizzati con il proprio set di problemi (nessuna località temporale, risorsa non ottimale uso).