Получить размер бина на выделение памяти в jemalloc

Я запускаю программу на C ++, которая использует jemalloc в качестве распределителя памяти, который предварительно делит большие порции на маленькие порции предопределенных размеров (то есть 1, 2, 4, 8, … байтов)

Даже при том, что я спрашиваю 110 байтов выделения памяти, он возвращает память объемом 128 байт.

В моей программе я отслеживаю объем динамически выделяемой памяти (с очень разными размерами) и ограничиваю выделение памяти потоками, чтобы избежать сбоя OutOfMemory.

Однако из-за несоответствия между запрошенным размером и фактическим предоставленным размером я не могу точно подсчитать количество динамически распределенных байтов.

Существует ли API-интерфейс jemalloc, который получает размер запроса в качестве входных данных и предоставляет фактический размер выделения в качестве выходных данных?

Спасибо

1

Решение

Согласно документации, вы можете использовать malloc_usable_size() и передать выделенный указатель.

Функция malloc_usable_size возвращает полезный размер выделения, на который указывает ptr. Возвращаемое значение может быть больше, чем размер, который был запрошен во время выделения. Функция malloc_usable_size не является механизмом для realloc на месте; скорее это предоставляется исключительно как инструмент для целей самоанализа. От любого несоответствия между запрошенным размером выделения и размером, сообщаемым malloc_usable_size, не должно зависеть, так как такое поведение полностью зависит от реализации.

Больше информации :

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]