Никто так и не ответил, откуда взялась цифра "57", так что вот мое понимание этого.
Заголовок, который устанавливается при использовании malloc или calloc, по крайней мере, на тех архитектурах, которые я использовал, представляет собой общий размер фрагмента памяти в куче времени выполнения плюс несколько «логических флагов».
Вы запросили 12 int, причем каждый int (предположительно) составляет 4 байта. 12x4 = 48. Еще 4 байта, для самого блока заголовка (число 57), добавляются к этому счету, оставляя нас в 52.
Так почему вы получаете 57?
Хорошо, Malloc и Calloc запрашивают память только в 8-битных блоках, чтобы избежать ошибок шины. Следующее более высокое кратное 8 - 56.
Теперь напомним, что любое число, которое делится на 8, имеет двоичное представление, которое всегда заканчивается тремя нулями. Будучи языком сохранения памяти, которым является C, компиляторы используют этот факт и используют последние три 0 в качестве логических флагов.
В этом конкретном случае устанавливается последний логический флаг, добавляя от 1 до 56, что приводит к числу 57 при чтении как int.