Могу ли я предположить, что вызов realloc с меньшим размером освободит остаток?

Давайте рассмотрим этот очень короткий фрагмент кода:

#include <stdlib.h>

int main()
{
    char* a = malloc(20000);
    char* b = realloc(a, 5);

    free(b);
    return 0;
}

После прочтения справочной страницы для realloc я не был полностью уверен, что вторая строка приведет к освобождению 19995 дополнительных байтов. Процитируем справочную страницу: Функция realloc() изменяет размер блока памяти, на который указывает ptr, на размер байтов. , но исходя из этого определения, могу ли я быть уверен, что остальные будут освобождены?

Я имею в виду, что блок, на который указывает 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
26
задан qdii 5 March 2012 в 22:46
поделиться