При выделении памяти в куче перед этими 8 байтами выделяется место под служебную информацию. Из-за этого такие большие накладные расходы в 100 мегабайт.
Для оптимального расходования памяти нужно использовать кастомный аллокатор, который будет выделять память большими кусками сразу, а потом уже использовать этот кусок для кучи маленьких объектов.