Давайте рассмотрим этот очень короткий фрагмент кода:
#include <stdlib.h>
int main()
{
char* a = malloc(20000);
char* b = realloc(a, 5);
free(b);
return 0;
}
Прочитав man-страницу для realloc, я не был полностью уверен, что вторая строка приведет к освобождению 19995 дополнительных байтов. Процитирую man-страницу: The realloc() function changes the size of the memory block pointed to by ptr to size bytes.
, но из этого определения могу ли я быть уверен, что остальные будут освобождены?
Я имею в виду, блок, на который указывает b
, безусловно, содержит 5 свободных байтов, поэтому достаточно ли для ленивого компилятора-компилятора просто ничего не делать для строки realloc?
Примечание. Кажется, что используемый мной распределитель освобождает 19 995 дополнительных байтов, как показывает valgrind при комментировании строки 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