Я запускаю программу на C ++, которая использует jemalloc в качестве распределителя памяти, который предварительно делит большие порции на маленькие порции предопределенных размеров (то есть 1, 2, 4, 8, … байтов)
Даже при том, что я спрашиваю 110 байтов выделения памяти, он возвращает память объемом 128 байт.
В моей программе я отслеживаю объем динамически выделяемой памяти (с очень разными размерами) и ограничиваю выделение памяти потоками, чтобы избежать сбоя OutOfMemory.
Однако из-за несоответствия между запрошенным размером и фактическим предоставленным размером я не могу точно подсчитать количество динамически распределенных байтов.
Существует ли API-интерфейс jemalloc, который получает размер запроса в качестве входных данных и предоставляет фактический размер выделения в качестве выходных данных?
Спасибо
Согласно документации, вы можете использовать malloc_usable_size()
и передать выделенный указатель.
Функция malloc_usable_size возвращает полезный размер выделения, на который указывает ptr. Возвращаемое значение может быть больше, чем размер, который был запрошен во время выделения. Функция malloc_usable_size не является механизмом для realloc на месте; скорее это предоставляется исключительно как инструмент для целей самоанализа. От любого несоответствия между запрошенным размером выделения и размером, сообщаемым malloc_usable_size, не должно зависеть, так как такое поведение полностью зависит от реализации.
Больше информации :
Других решений пока нет …