Vamos a considerar esta muy corto fragmento de código:¿Puedo asumir que llamar a realloc con un tamaño más pequeño liberará el resto?
#include <stdlib.h>
int main()
{
char* a = malloc(20000);
char* b = realloc(a, 5);
free(b);
return 0;
}
Después de leer la página del manual de realloc, no estaba del todo seguro de que la segunda línea haría que los 19995 bytes adicionales a ser liberados. Para citar la página man: The realloc() function changes the size of the memory block pointed to by ptr to size bytes.
, pero a partir de esa definición, ¿puedo estar seguro de que se liberará el resto?
Quiero decir, el bloque apuntado por b
ciertamente contiene 5 bytes libres, ¿entonces sería suficiente que un asignador de cumplimiento lento simplemente no haga nada por la línea de realojo?
Nota: El asignador utilizo parece liberar a los 19 995 bytes adicionales, como se muestra por valgrind al comentar la línea free(b)
:
==4457== HEAP SUMMARY:
==4457== in use at exit: 5 bytes in 1 blocks
==4457== total heap usage: 2 allocs, 1 frees, 20,005 bytes allocated
El encabezado '' no está definido por el estándar: prefiere usar ''. También arrojar el valor de retorno de 'malloc' (o' realloc') no sirve para nada útil y puede ocultar un error (* la representación de 'void *' y 'int' es diferente *) que el compilador hubiera detectado de otra manera. –
pmg
["El tamaño del bloque de memoria apuntado por el parámetro ptr se cambia a los bytes de tamaño, expandiendo o reduciendo la cantidad de memoria disponible en el bloque."] (Http://www.cplusplus.com/reference/clibrary/cstdlib/realloc /) –
@pmg ok No lo sabía. Cambiaré en mi fragmento – qdii