1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/apengge-TrickyMemoryAllocator

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Описание функциональности

Этот менеджер памяти предназначен для максимальной повторной перезаписи уже выделенной памяти с использованием алгоритма 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Используется для решения проблемы фрагментации памяти, возникающей при частом обращении к ней. Возвращает только давно неиспользуемую память, чтобы максимально сократить количество операций по выделению и освобождению памяти операционной системой. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/apengge-TrickyMemoryAllocator.git
git@api.gitlife.ru:oschina-mirror/apengge-TrickyMemoryAllocator.git
oschina-mirror
apengge-TrickyMemoryAllocator
apengge-TrickyMemoryAllocator
master