Этот менеджер памяти предназначен для максимальной повторной перезаписи уже выделенной памяти с использованием алгоритма LRU (Least Recently Used). Он возвращает долгое время не используемые участки памяти, что значительно повышает эффективность повторного использования памяти. В условиях высоконагрузочной работы этот менеджер памяти обеспечивает более чем 99% повторного использования памяти, что существенно увеличивает производительность при работе с распределением и освобождением памяти.
BaseMemManager — это интерфейсный класс менеджера памяти, который регламентирует поведение его потомков.
StdMemManager — реализация операционной системы API менеджера памяти, которая непосредственно вызывает malloc и free. Этот класс используется для сравнения с GreedyMemManager для проверки производительности.
GreedyMemManager — жадный менеджер памяти, который кэширует освобожденную память и использует алгоритм LRU для возврата долгое время не используемых участков памяти. (Активно используемый менеджер памяти)
Циклическое тестирование 100 000 циклов выделения и освобождения памяти, где каждый раз выделяется случайное значение размера памяти внутри определённого диапазона.
случайная длина байтов начальная: 65, конечная: 1024, количество тестов: 100000, стоимость системного API: 266, стоимость greedyMemory: 47, общее количество вызовов malloc: 100000, количество переиспользуемых блоков: 99996, количество вызовов системного malloc: 4
случайная длина байтов начальная: 1025, конечная: 10240, количество тестов: 100000, стоимость системного API: 688, стоимость greedyMemory: 31, общее количество вызовов malloc: 100000, количество переиспользуемых блоков: 99996, количество вызовов системного malloc: 4
случайная длина байтов начальная: 10241, конечная: 102400, количество тестов: 100000, стоимость системного API: 4187, стоимость greedyMemory: 31, общее количество вызовов malloc: 100000, количество переиспользуемых блоков: 99996, количество вызовов системного malloc: 4
случайная длина байтов начальная: 102401, конечная: 1048576, количество тестов: 100000, стоимость системного API: 19922, стоимость greedyMemory: 47, общее количество вызовов malloc: 100000, количество переиспользуемых блоков: 99996, количество вызовов системного malloc: 4
случайная длина байтов начальная: 1048576, конечная: 5242880, количество тестов: 10000, стоимость системного API: 9922, стоимость greedyMemory: 15, общее количество вызовов malloc: 10000, количество переиспользуемых блоков: 9996, количество вызовов системного malloc: 4
Даже при минимальном значении 65 байт до 1 КБ производительность возрастает в несколько раз. При увеличении размера блока памяти производительность возрастает в сотни и тысячи раз.#### Тестирование диапазона широких объемов памяти Циклическое тестирование 10 000 циклов выделения и освобождения памяти, где каждый раз выделяется случайное значение размера памяти от 1 байта до 5 МБ.
случайная длина байтов начало: 1, конец: 5242880, количество тестов: 10000, стоимость системной API: 8891, стоимость greedyMemory: 15, общее количество вызовов malloc: 9999, количество переиспользованных блоков: 9983, количество вызовов системного malloc: 16
При таком широком диапазоне различных объемов памяти производительность всё ещё возрастает в ( \frac{8891}{15} = 593 ) раз. Уровень повторного использования памяти также достигает: 99,83%.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )