Это подмножество a previous question.Какие алгоритмы управления памятью используются основными поставщиками компиляторов?
В качестве упражнения я пишу менеджер памяти - (. Или новые и удалять), то есть код, который реализует таНос, перераспределить и бесплатно RTL для моего языка, Delphi, allows the RTL's memory manager to be replaced easily. Для тех из вас, кто использует C++, это похоже на, но более низкого уровня, чем переопределение новых и удаленных (он перехватывает сам RTL, а не язык).
Я ищу ресурсы, подходы к качеству, к которым другие относятся к одной и той же проблеме, и пытаюсь выяснить, какие алгоритмы используют другие крупные производители компиляторов. В то время как Delphi хорошо документирован, я не могу найти никакой информации о реализациях, используемых MS VC++, .NET или Objective C. Эти поставщики не кажутся (?), Чтобы позволить их RTL подключаться, как это делает Delphi. Все документы выглядят более высокоуровневыми, например NSAutoReleasePool
, чтобы выбрать случайный пример - слишком высокий уровень для этого вопроса.
Какие алгоритмы управления памятью используют основные поставщики (Microsoft VC++ и .Net и Apple Objective C) в своих библиотеках времени выполнения?
- Embarcadero Delphi and C++ Builder is well documented.
- Linux seems to use Buddy, хотя предполагаю, что эта информация не указана дата.
- MS VC++: неизвестно.
- .Net: неизвестно.
- Цель C: неизвестно.
Пример большого ответа был бы документ, описывающая реализацию менеджера памяти, такие как this one, или ссылка на опубликованную бумагу. Примером полезным является ответ - алгоритм: «Время выполнения VC++ использует the Hoard allocator».
Вау ... но управление памятью настолько сложное, что это животное - оно распространено на уровнях многих-многих-многих. Например, с Delphi: FastMM4 реализует три алгоритма в зависимости от размера блока. Но помимо этого есть RTL, который реализует управление памятью с резервным копированием + refcounting для dyn-массивов и строк. Затем есть классы TComponent и TObjectList, которые реализуют атрибуты Owner-Items algorythm, а затем снова возвращается TInterfaceObject для повторного подсчета ... И все эти алгоритмы управления памятью ARE. И все эти алгоритмы вместе реализуют СТРАТЕГИЮ данного HMMgr + Language + RTL –
+1, это довольно интересный вопрос, если только для академических целей :-) –
С такими языками на основе GC, как .Net, JVM и снова ObjC, быть разными ожиданиями и разными алгоритмами в диспетчере памяти, в зависимости от того, какая информация может (или не может) Memory Manager надежно получить от языка. Просто прочитайте содержимое http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) –