malloc()
выделяет пространство, округленное до 16 байтов (по крайней мере, в win32), поэтому вы будете использовать 32 байта в первом выделении и 16 * 5 в цикле.
Существуют также служебные данные malloc (и время, и память), потому что malloc()
ставит специальный заголовок, _CrtMemBlockHeader
перед областью памяти, которую он возвращает (поэтому вы должны дать точно такой же указатель наfree()
и могут использовать такие функции, как _msize()
.
Таким образом, фактически используемый объем памяти будет 32 + 80 = 112 байт. Учитывая также издержки для заголовка: + 5 * sizeof (__ CrtMemBlockHeader)
конечная сумма может достигать 300 байт, что примерно в 8 раз больше ожидаемых 35.