In C (o C++) mi chiedo se sia possibile deallocare parzialmente un blocco di memoria.È possibile deallocare parzialmente la memoria?
Per esempio, supponiamo di creare un array di interi a
di dimensioni 100,
int * a = malloc(sizeof(int)*100);
e poi vogliamo ridimensionare a
in modo che tenga 20 int anziché 100.
C'è un modo per liberare solo gli ultimi 80 * sizeof (int) byte di a
? Ad esempio, se chiamiamo realloc, lo farà automaticamente?
- Sto cercando una soluzione che non richieda lo spostamento/la copia dei primi 20 pollici.
- In alternativa, puoi spiegare perché sarebbe male se ciò fosse possibile o perché la capacità di farlo non fosse inclusa in nessuna delle due lingue?
Non realloc copia l'array e quindi libera l'originale? – Cam
@Cam, no. È permesso (e spesso lo farà) di restringere la regione esistente. –
@ watson1180: Giusto, ma questo da solo non significa niente. In linea di principio, realloc potrebbe essere implementato per prendere il tempo O (n!^99) e allocare sempre 500 volte la memoria necessaria, ma di certo non lo consideriamo quando prendiamo decisioni che coinvolgono realloc. – Cam