Какие алгоритмы управления памятью хорошо известны и используются основными поставщиками компиляторов?

В качестве упражнения я пишу менеджер памяти, то есть код, реализующий malloc, realloc и free (или new и delete). RTL для моего языка Delphi позволяет легко заменить диспетчер памяти RTL. Для тех из вас, кто использует C ++, это похоже на переопределение new и delete, но на более низком уровне (он подключается к самому RTL, а не является функцией языка). Я ищу ресурсы о высококачественных подходах, которые есть у других. взяли на себя ту же проблему.

Я знаю несколько алгоритмов и реализаций управления памятью, включая FastMM4 (довольно сложный), Распределитель Дуга Ли, Buddy, JeMalloc, TcMalloc и Клад. Я ищу информацию о следующем:

  • Известные рекомендуемые алгоритмы: какие еще были опубликованы высококачественные алгоритмы, помимо вышеперечисленных?

  • Существуют ли специальные алгоритмы, предназначенные для многопоточных приложений? То есть там, где может быть высокая конкуренция потоков в любых заблокированных точках для выделения или освобождения, и где память может быть выделена в одном потоке, но освобождена в другом нить? Большинство алгоритмов - за заметными исключениями Hoard, JeMalloc и TcMalloc - похоже, предназначены для однопоточной работы, а осведомленность о потоках - это только безопасность потоков, поскольку в соответствующих точках есть блокировки или другая синхронизация - без особого дизайна.

  • Что используют основные поставщики? Хотя Delphi и C ++ Builder задокументированы , Я не могу найти никакой информации о реализациях, используемых MS VC ++, .Net или Objective C. (Кажется, вся документация более высокого уровня, например NSAutoReleasePool. Linux, похоже, использует Buddy.) Эти поставщики, похоже, не позволяют подключать свои RTL, как это делает Delphi. Мне было бы очень интересно прочитать об их реализациях.


person David    schedule 19.03.2013    source источник
comment
Почему закрытое голосование? Этот вопрос не является двусмысленным, расплывчатым, неполным или риторическим; он также не широк в том, что он спрашивает об алгоритмических и известных реализациях для конкретной низкоуровневой проблемы. Это должно быть ясно. Если вы считаете это сомнительным, попросите разъяснений.   -  person David    schedule 19.03.2013
comment
этот вопрос, скорее всего, повлечет за собой дебаты, аргументы, опрос или расширенное обсуждение   -  person Taryn East    schedule 21.03.2013
comment
Когда я комментировал, голосовал только за двусмысленность. Боюсь, что я не понимаю, как это вызовет дебаты, аргументы, опросы или обсуждения. Вопросы кажутся довольно простыми и на них можно ответить, основываясь на фактах, а не на мнениях - я ожидаю, что за первыми двумя частями будут стоять статистика, документы / технические документы или, по крайней мере, опыт - см. Ответ на связанный jemalloc для хорошего примера, который включает в себя Технический документ в формате PDF. Третье совершенно однозначно, кто-то знает ответ или нет.   -  person David    schedule 22.03.2013
comment
@TarynEast: прокомментируйте, чтобы отметить свое имя, поскольку вы не были отмечены, когда я вам ответил.   -  person David    schedule 23.03.2013
comment
Есть ли у кого-нибудь из закрывшихся модераторов конструктивные комментарии о том, как задать менее двусмысленный или менее вероятный вопрос для обсуждения, пожалуйста? (Я изо всех сил пытаюсь понять, почему он подходит любому из них, но некоторые из вас, очевидно, думают, что он подходит. Пожалуйста, помогите мне понять, почему.) Я был бы признателен за полезные отзывы, так как голосование без комментариев - спасибо @TarynEast за ваше и многое другое было бы здорово - бесполезно.   -  person David    schedule 25.03.2013
comment
Привет, @David_M. Я думаю, проблема в том, что вы просите больше, чем об одном. и у людей будет свое мнение о том, что лучше. Конечно, вы просите о технических документах и ​​хорошем обсуждении ... но это все еще обсуждение ... и о S / O, что часто автоматически приводит к дебатам. Вопросы S / O в наши дни нацелены на конкретные вопросы с одним ответом. Ваш вопрос, хотя и интересный и действительный ... на самом деле не является вопросом типа S / O. Что больше нацелено на то, чтобы у меня возникли проблемы с реализацией алгоритма X, он не работает в точке Y с сообщением об ошибке Z, вы можете сказать мне, где я могу найти решение?   -  person Taryn East    schedule 04.04.2013
comment
Спасибо @TarynEast. Будет ли сайт programmers.se лучшим форумом? Если SO сужается до простого вопроса-ответа, тогда он кажется менее полезным, чем был раньше - не так много смысла иметь широкий круг экспертов, если роль здесь для ответчиков похожа на службу поддержки, вместо того, чтобы иметь возможность обращаться к более широким кругам. , более глубокие вопросы.   -  person David    schedule 04.04.2013
comment
Привет. Это хороший вопрос ... к сожалению, я не знаю ответа на него (плюс programmers.se фактически ведет на сайт на шведском языке ...);) Здесь у нас разный опыт. Я обнаружил, что S / O чрезвычайно полезен потому что это служба поддержки, как вопрос / ответ - что означает, что если у меня есть конкретная проблема и я ее погуглил - я знаю, что S / O - хорошее место для поиска рабочий, конкретный ответ, а не долгая дискуссия на самые разные второстепенные темы. YMMV :)   -  person Taryn East    schedule 09.04.2013