История изменений
Исправление KivApple, (текущая версия) :
Так то да, но наихудшая стратегия
Не наихудшая. Какие альтернативы? Поиск блока наиболее подходящего размера приводит к появлению большого количества маленьких огрызков блоков, которые невостребованы (malloc(1) не самая распространеная команда). Тоже не идеал. И что самое главное - меняется только условие выхода из цикла поиска в malloc, структура данных вообще не меняется.
Из простых стратегий поиска блоков с одним списком выбор первого попавшегося нормальная стратегия со своими плюсами и минусами, некоторые источники даже называют лучшей (среди односписочных) при реалистичном использовании.
Лучше будут только более навороченные алгоритмы типа slab allocator, но они точно так же могут хранить часть данных в свободной памяти.
Но суть не в этом, а в том, что free легко может портить данные в освобожденном блоке памяти делая бессмысленным или даже опасным доступ к ней после free.
Фрагментация кучи глобальная проблема, которой подвержены вообще все аллокаторы (ну кроме разве что GC с перемещением памяти, но там тоже есть своя цена решения проблемы) и не имеет прямого отношения к тому, где они хранят свои структуры.
Исправление KivApple, :
Так то да, но наихудшая стратегия
Не наихудшая. Какие альтернативы? Поиск блока наиболее подходящего размера приводит к появлению большого количества маленьких огрызков блоков, которые невостребованы (malloc(1) не самая распространеная команда). Тоже не идеал. И что самое главное - меняется только условие выхода из цикла поиска в malloc, структура данных вообще не меняется.
Из простых стратегий поиска блоков с одним списком выбор первого попавшегося нормальная стратегия со своими плюсами и минусами, некоторые источники даже называют лучшей (среди односписочных) при реалистичном использовании.
Лучше будут только более навороченные алгоритмы типа slab allocator, но они точно так же могут хранить часть данных в свободной памяти.
Но суть не в этом, а в том, что free легко может портить данные в освобожденном блоке памяти делая бессмысленным или даже опасным доступ к ней после free.
Фрагментация кучи глобальная проблема, которой подвержены вообще все аллокаторы и не имеет прямого отношения к тому, где они хранят свои структуры.
Исправление KivApple, :
Так то да, но наихудшая стратегия
Не наихудшая. Какие альтернативы? Поиск блока наиболее подходящего размера приводит к появлению большого количества маленьких огрызков блоков, которые невостребованы (malloc(1) не самая распространеная команда). Тоже не идеал.
Из простых стратегий поиска блоков с одним списком выбор первого попавшегося нормальная стратегия со своими плюсами и минусами, некоторые источники даже называют лучшей (среди односписочных) при реалистичном использовании.
Лучше будут только более навороченные алгоритмы типа slab allocator, но они точно так же могут хранить часть данных в свободной памяти.
Но суть не в этом, а в том, что free легко может портить данные в освобожденном блоке памяти делая бессмысленным или даже опасным доступ к ней после free.
Фрагментация кучи глобальная проблема, которой подвержены вообще все аллокаторы и не имеет прямого отношения к тому, где они хранят свои структуры.
Исправление KivApple, :
Так то да, но наихудшая стратегия
Не наихудшая. Какие альтернативы? Поиск блока наиболее подходящего размера приводит к появлению большого количества маленьких огрызков блоков, которые невостребованы (malloc(1) не самая распространеная команда). Тоже не идеал.
Из простых стратегий поиска блоков с одним списком выбор первого попавшегося нормальная стратегия со своими плюсами и минусами, некоторые источники даже называют лучшей при реалистичном использовании.
Лучше будут только более навороченные алгоритмы типа slab allocator, но они точно так же могут хранить часть данных в свободной памяти.
Но суть не в этом, а в том, что free легко может портить данные в освобожденном блоке памяти делая бессмысленным или даже опасным доступ к ней после free.
Фрагментация кучи глобальная проблема, которой подвержены вообще все аллокаторы и не имеет прямого отношения к тому, где они хранят свои структуры.
Исходная версия KivApple, :
Так то да, но наихудшая стратегия
Не наихудшая. Какие альтернативы? Поиск блока наиболее подходящего размера приводит к появлению большого количества маленьких огрызков блоков, которые невостребованы (malloc(1) не самая распространеная команда).
Из простых стратегий поиска блоков с одним списком выбор первого попавшегося нормальная стратегия, некоторые источники даже называют лучшей при реалистичном использовании.
Лучше будут только более навороченные алгоритмы типа slab allocator, но они точно так же могут хранить часть данных в свободной памяти.
Но суть не в этом, а в том, что free легко может портить данные в освобожденном блоке памяти делая бессмысленным или даже опасным доступ к ней после free.