Я всегда предполагал, что куча (структура данных) используется для реализации кучи (распределение динамической памяти), но мне сказали, что я не прав.
Как, например, реализованы кучи (например, реализованные типичными подпрограммами malloc
или Windows HeapCreate
и т.д.)? Какие структуры данных они используют?
Что я не спрашиваю:
При поиске в Интернете я видел тонны описаний того, как реализовать кучи с жесткими ограничениями.
Чтобы назвать несколько, я видел множество описаний того, как реализовать:
- Кучи, которые никогда не выпускают память обратно в ОС (!)
- Кучи, которые дают разумную производительность только для небольших блоков аналогичного размера.
- Кучи, которые дают разумную производительность для больших смежных блоков
- и др.
И это смешно, все они избегают более сложного вопроса:
Как реализованы "нормальные", универсальные кучи (например, за malloc
, HeapCreate
)?
Какие структуры данных (и, возможно, алгоритмы) они используют?