Может ли кто-нибудь указать мне на источник или схему, как работает алгоритм для кучи низкой фрагментации?Предотвращение фрагментации памяти
ответ
Сначала решите, какие «кратные» вы хотите использовать для выделенных блоков памяти. Обычно я использую 8 байтов.
При запуске приложения создайте вектор, в котором каждый элемент в векторе указывает на «пул» блоков памяти. Первый индекс в векторе будет для выделения памяти 8 байтами или меньше. Второй индекс в векторе будет для выделения памяти из 9-16 байтов и т. Д.
В каждом пуле выделяйте память в больших кусках. Например. в пуле для размещения 8 байтов (или меньше) не выделяют 8 байтов, а выделяют N раз 8 байтов. Внутри пула помните, какие части действительно выделены в приложении и какие части просто ждут выделения.
При освобождении памяти не освобождайте ее немедленно, но держите некоторые куски готовыми к следующему распределению этого размера. Только если у вас есть много последующих свободных фрагментов, верните свободную память в операционную систему.
Это основная идея. Остальные реализуют пулы (обычно связанные списки кусков).
Сложная часть интегрирует реализацию кучи в приложение.
- Если вы все еще используете таНос/бесплатно, использовать # определить, чтобы переопределять таНос и бесплатно
- Если вы используете новые/удалить, определить глобальные новые и удалять операторы
Также обратите внимание на How to solve Memory Fragmentation, и мой комментарий на Memory management in memory intensive application
От MSDN:
LFH - это не отдельная куча. Вместо этого это политика, которую приложения могут использовать для своих куч. Когда LFH включен, система выделяет память в определенных предопределенных размерах. Когда приложение запрашивает выделение памяти из кучи с включенным LFH, система выделяет наименьший блок памяти, который достаточно велик, чтобы содержать запрошенный размер.
Эта стратегия используется многими менеджерами по продуктам памяти, хотя детали могут отличаться.
- 1. Способы избежать фрагментации памяти
- 2. Профайлер фрагментации памяти
- 3. Различают утечку памяти из фрагментации памяти
- 4. Инструменты для проверки фрагментации памяти
- 5. Предотвращения памяти фрагментации в Полиморфном Контейнере
- 6. перераспределить память, чтобы избежать фрагментации памяти
- 7. Решение внешней фрагментации в смежном распределении памяти
- 8. Разделение кучи для устранения фрагментации памяти
- 9. Обнаружение проблемы фрагментации памяти в процессе
- 10. Ошибка фрагментации памяти GC GC. Обходной путь?
- 11. Ошибка Excel 2013 из-за фрагментации памяти
- 12. Скажите, скажите знак фрагментации памяти (в отличие от утечки памяти)?
- 13. Предотвращение утечек памяти AJAX
- 14. Предотвращение переполнения памяти
- 15. Предотвращение моей памяти течи
- 16. Предотвращение использования общей памяти
- 17. Стратегия фрагментации кучи Android?
- 18. Как избежать фрагментации кучи?
- 19. Предотвращение доступа к памяти процесса
- 20. Предотвращение утечки памяти в Android
- 21. Обработка фрагментации
- 22. Является ли масштабируемый распределитель TBB подчеркиванием фрагментации памяти?
- 23. Инструменты для просмотра/устранения фрагментации памяти Windows XP
- 24. Как я могу предсказать серьезную проблему фрагментации памяти, вероятно, произойдет?
- 25. Избегайте фрагментации памяти при распределении множества массивов в Java
- 26. Как отправлять файлы, не беспокоясь о фрагментации памяти?
- 27. Передача данных из одной фрагментации в другую функцию фрагментации
- 28. Карты Google внутри фрагментации
- 29. Ошибка фрагментации при реализации
- 30. Проблема фрагментации кеша APC
Похоже, что большинство людей читает вопрос так: «Как создать и распределить ресурсы с минимальной фрагментацией?». Но я думаю, что автор означает: «Какой алгоритм использует кучи низкоуглеродистой Windows?» Ответ на этот вопрос не связан с простым поиском. –