parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

moko 12.12.2022 12:19

Я ожидаю увидеть уменьшение used между итерациями.
Почему? Как уже писал, used это суммарный размер используемых блоков. Это не равно суммарному размеру аллоцированной памяти. Например вы просите 16 байт. Если нет свободной, libgc аллоцирует у системы блок в 4kb, в котором можно разместить 256 элементов по 16 байт. Далее они занимаются, потом частично освобождаются. Если в блоке не останется ни одного используемого элемента, он будет считаться free. Но если будет занят хоть один из 256 - в used это будет считаться как 4kb, хотя аллоцировано всего 16 байт.

P.S. Надеюсь не сильно соврал, в интернете больше написано про то, как технически устроена сборка мусора в libgc. А про то, что размер маленьких объектов при аллокации округляется до 8 байт и они хранятся в блоках картинок не нашел, хотя это весьма серьезная оптимизация по сравнению с системным malloc.