En C (o C++) me pregunto si es posible desasignar parcialmente un bloque de memoria.¿Es posible desasignar parcialmente la memoria?
Por ejemplo, supongamos que creamos una matriz de enteros a
de tamaño 100,
int * a = malloc(sizeof(int)*100);
y luego queremos cambiar el tamaño a
manera que tiene capacidad para 20 enteros en lugar de 100.
¿Hay una forma de liberar solo los últimos 80 * sizeof (int) bytes de a
? Por ejemplo, si llamamos a realloc, ¿lo hará automáticamente?
- Estoy buscando una solución que no requiera mover/copiar los primeros 20 ints.
- Como alternativa, ¿puede explicar por qué sería malo si esto fuera posible o por qué la capacidad de hacer esto no estaba incluida en ninguno de los dos idiomas?
¿No copia realloc la matriz y luego libera el original? – Cam
@Cam, no. Está permitido (y a menudo) reducir la región existente. –
@ watson1180: Correcto, pero eso solo no significa nada. En principio, realloc podría implementarse para tomar O (n!^99) tiempo y asignar siempre 500 veces la memoria necesaria, pero ciertamente no se tiene en cuenta al tomar decisiones que involucran a realloc. – Cam